1. 관계형 데이터베이스의 관계를 이해하고 스키마를 설계할 수 있다.
- 데이터베이스 설계
✔︎ 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명
✔︎ 데이터베이스의 청사진
✔︎ 데이터 (data) : 각 항목이 저장되는 값
✔︎ 테이블 (table 또는 relation) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적
✔︎ 컬럼 (column 또는 field) : 테이블의 한 열
✔︎ 레코드 (record 또는 tuple) : 테이블의 한 행에 저장된 데이터
✔︎ 키 (key) : 테이블의 각 레코드를 구분할 수 있는 값, 각 레코드마다 고유한 값을 가짐
✔︎ 키 종류 : 기본키 (primary key), 외래키 (foreign key)
✔︎ 1:1 관계
✔︎ 1:N 관계 (일대다)
✔︎ N:N 관계 (다대다)
JOIN
테이블을 만들어 관리✔︎ 자기참조 관계 (Self Referencing Relationship)
- SQL More
✔︎ 집합연산 : 레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산
✔︎ GROUP BY : 데이터를 조회할 때 그룹으로 묶어서 조회
SELECT * FROM 테이블명
GROUP BY 필드명;
✔︎ HAVING : GROUP BY로 조회한 결과 필터링
✔︎ COUNT() : 레코드의 개수를 셀 때 사용
SELECT *, COUNT(*)
FROM 테이블명
GROUP BY 필드명;
✔︎ SUM() : 레코드의 합을 리턴
SELECT *, SUM(필드명)
FROM 테이블명
GROUP BY 필드명;
✔︎ AVG() : 레코드의 평균값을 계산
SELECT *, AVG(필드명)
FROM 테이블명
GROUP BY 필드명;
✔︎ MAX(), MIN() : 각각 레코드의 최대값과 최소값을 리턴
SELECT *, MIN(필드명)
FROM 테이블명
GROUP BY 필드명;
✔︎ FROM
✔︎ WHERE
✔︎ GROUP BY
✔︎ HAVING
✔︎ SELECT
✔︎ ORDER BY
☞ 오늘은 어제 배웠던 SQL문에 몇 가지 명령어를 추가적으로 공부했고, 데이터베이스의 여러 관계들을 학습하며 스키마를 접하여 작성하는 시간을 가졌다. dbdiagram
을 통하여 instagram 스키마 디자인을 해봤는데, 처음에는 dbdiagram을 작성할 명령어도 잘 파악하지 못해 머뭇거렸지만, 사용법을 익히며 성공적(?)으로 스키마를 작성했다.
먼저, 빈 노트에 펜으로 틀을 잡고 dbdiagram을 통해 스키마 틀에 적용시켰다. 초반에 배웠던 와이어프레임이 생각나는 시간이었다. dbdiagram에서는 해당 사이트의 명령어들을 이용해 작성할 수도 있지만, mysql
을 이용해 작성해도 바로 번역(?)시켜줘서 mysql을 익히는 데도 큰 도움이 될 것 같았다. 여러 가지 방법으로 작성해보며 익혀봐야겠다.
오늘 배운 관계 중 핵심은 1:N(일대다)관계일 때는 N에 1의 id들을 넣어주는 것이고, N:M (다대다) 관계일 때는 따로 JOIN을 사용하여 1:N관계를 두 개로 연결시켜준다는 것이다. 많이 머리 속이 복잡하고 생각을 많이 해야하는 시간이었지만, 그만큼 성장의 밑거름이 됐을 것이라 생각이 든다.
마무리로 내가 작성한 instagram 스키마 디자인을 첨부한다.
// dbdiagram 스키마 디자인 코드
Table users {
id int [pk, increment]
name varchar
}
Table following {
user_id int
follwer_id int
}
Table followers {
id int [pk, increment]
name varchar
}
Table posts {
id int [pk, increment]
user_id int
content varchar
date int
}
Table pictures {
id int [pk, increment]
post_id int
picture image
}
Table likes {
id int [pk, increment]
post_id int
like int
}
Table comments {
id int [pk, increment]
post_id int
comment varchar
date int
}
Table hashTags {
id int [pk, increment]
hashTag varchar
}
Table post_hasgTag {
post_id int
hashTag_id int
}
ref: users.id < following.user_id
ref: followers.id < following.follwer_id
ref: users.id < posts.user_id
ref: posts.id < pictures.post_id
ref: posts.id < likes.post_id
ref: posts.id < comments.post_id
ref: posts.id < post_hasgTag.post_id
ref: hashTags.id < post_hasgTag.hashTag_id
・ 과제 - Learn Schema / SQL (with Pair)