본 글은 생활코딩님 강의의 리뷰입니다!
First normalization
제 1 정규화의 핵심은,
atomic columns, 한 표에는 한 항목만 들어갈 수 있다.
입니다. 왜냐구요?
query 문을 칠 때, WHERE = 'tag' 일 경우, 한 행 안에 'tag, RGB' 가 들어가있는 것은 찾을 수 없습니다....
한 행 안에는 한 항목만 들어있어야 query 문으로 찾을 수 있지요!
M대 N 관계, 즉 다대다 관계에서 어떻게 처리가 되는지 확인함과 동시에 표가 어떻게 처리되는지 확인해 봅시다
일단 ER 다이어그램 상에서 다대다 관계가 어떻게 처리되는지 확인해 봅시다.
저자와 글이 이렇게 다대다 관계로 엮여 있는 경우를 생각해 봅시다. 이런 경우, atomicity 를 확보하기 위해 취해야하는 요건은 하나의 table 을 추가하는 것입니다. 이를 논리적 데이터 모델링 상에서 확인해 봅시다.
저자와 글의 primary key 를 foreign key 로 받아들인 다음, 그것을 둘 다 primary key 로 사용해야 한다!
이게 잘 이해가 안된다면, 직접 표를 그려보며 이해해보면 이해가 빠르다.
tag 처리가 참으로 애매해다.
tag1, tag2 로 추가하기에는 tag가 몇까지 추가하여야 하는지 감이 안잡힙니다.
또한 tag 앞 모든 column 을 중복하여 rdb, free 를 세로로 표시하기에는 지나치게 중복이 많아집니다....
이런경우를 위해서 연결 테이블을 만들어 줘야합니다!
연결 테이블을 만드는 법은 다음과 같습니다.
우선 문제가 되는 tag 를 분리해 주고, ID 를 부여해 줍니다.
그 후 primary key를 각각 가져와서 연결테이블을 만들어 줍니다.
여기서 의문이 드는 것이, primary key가 title 이 아니지 않나요?! 라고 말할 수 있다. 음.. 그런데 일단 topic 표에는 primary key라고 할 만한 것이 없는 상태이다...
또한, 잘 보면 MySQL 안에 있는 tag 가 동일한 상황이다. 그렇기 때문이 이상황에서는 MySQL 을 key 로 가져오는 것이 가장 효율적인 상황이란 것을 알 수 있다!
단순한 개념 이해보단 실전 적용이 중요한것 같다..
'CS > DB' 카테고리의 다른 글
[캐글] 중복된 데이터 병합하기 (kaggle store-sales-time-series-forecasting_2) (0) | 2022.10.23 |
---|---|
[캐글] 파이썬 CSV 데이터 확인하는 2가지 방법 (kaggle store-sales-time-series-forecasting_1) (0) | 2022.10.19 |
[MySQL] ER 다이어그램 entity, attribute, relationship (0) | 2022.02.04 |
[MySQL] ER 다이어그램 foreign key, primary key (0) | 2022.02.04 |
[MySQL] ER 다이어그램 화살표, draw.io_생활코딩 리뷰 (0) | 2022.02.04 |