[학습목표]
데이터 간의 다양한 관계를 알아본다
데이터 간 관계를 기술하는 언어(SQL)를 익힌다
합리적이고 효율적인 방법으로 데이터베이스를 구성하는 방법을 이해
데이터베이스에서 관련 정보를 찾기 위해 SQL 쿼리를 작성하는 방법을 알아본다
스키마(schema) : 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명. 데이터베이스의 청사진

엔티티(Entity) : 고유한 정보의 단위. Teachers, Classes, Students. 테이블로 표시됨
필드 : 해당 엔티티의 특성을 설명. 행렬 중 렬. Teacher의 필드는 Name, Department, Classes
레코드 : 테이블에 저장된 항목. 행렬 중 행. Teacher 중 Cynthia, Music, Music Theory
ID : 고유한 값. 기본 키 (Primary Key)
foriegn key : 참조키. 기본키를 참조
1:다 의 관계는 인덱스를 참조하는 것이 가장 베스트
다:다의 관계는 테이블로 생각 1:다를 두 번 쓴 것으로 생각 (조인 테이블)
[데이터베이스 설계]
데이터 : 각 항목에 저장되는 값
테이블 (table 또는 relation) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적
칼럼 (column 또는 field) : 테이블의 한 열
레코드 (record 또는 tuple) : 테이블의 한 행에 저장된 데이터
키 : 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유한 값을 가짐 (기본키, 외래키 등)
테이블 사이 관계
1:1
1:N
N:N : Join 테이블 만들어 관리
[SQL 내장함수]
GROUP BY // 그룹을 묶어서 조회
HAVING // GROUP BY 로 조회된 결과 필터링 가능
SELECT CustomerID, AVG(Total)
FROM invoices // Invoice 테이블을
GROUP BY CustomerID // CustomerID로 그룹화하고
HAVING AVG(Total) > 6.00 // 그 평균이 6 초과한 결과 조회
WHERE : 저장된 레코드를 필터링 (그룹화 전)
HAVING : 그룹화한 결과에 대한 필터
SUM()
AVG()
MAX()
MIN()
[SELECT 실행 순서]
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
[인스타그램 스키마 디자인]
https://dbdiagram.io/
해당 사이트에서 그래프로 쉽게 도식화하여 볼 수 있다
오늘 과제로 제출한 스키마 디자인 (ERD 다이어그램)

Table USERS {
user_id int
username varchar(255)
password varchar(255)
following int
follower int
}
Table POSTS {
posts_id int
username varchar(255)
likes int
text varchar
post_date timestamp
post_comments varchar
hashtag varchar
photo varchar
}
Table FOLLOWINGS {
followings_id int
following_id int
following_name varchar
}
Table FOLLOWERS {
followers_id int
follower_id int
follower_name varchar
}
Table LIKES {
like_id int
username varchar
}
Table COMMENTS {
comments_id int
username varchar
comment varchar
comment_date timestamp
hashtag varchar
}
Table PHOTOS {
photos_id int
url varchar
}
Table HASHTAGS {
hashtags_id int
hashtag varchar
}
Table POSTHASHTAG {
posthashtag_id int
hashtag varchar
}
Ref: USERS.following < FOLLOWINGS.following_id
Ref: USERS.follower < FOLLOWERS.follower_id
Ref: USERS.username < POSTS.username
Ref: USERS.username < LIKES.username
Ref: USERS.username < COMMENTS.username
Ref: POSTS.likes < LIKES.like_id
Ref: HASHTAGS.hashtag < POSTHASHTAG.hashtag
Ref: HASHTAGS.hashtag < POSTS.hashtag
Ref: HASHTAGS.hashtag < COMMENTS.hashtag
Ref: PHOTOS.url < POSTS.photo
Ref: COMMENTS.comment < POSTS.post_comments
Ref: USERS.username < FOLLOWINGS.following_name
Ref: USERS.username < FOLLOWERS.follower_name
글자수 제한 얼마큼 잡아줘야 하는 지 세세하게 적어주고 싶었는데 애매할바엔 안 적는게 낫겠다 싶어서 적지 않았다