제3정규형
까지가 산업에서 많이 쓰임.(나머지는 학술적인 용도로 쓰임)정규화
를 통해 관계형데이터베이스에 걸맞는 표로 만들어 나가는 것제1정규형
-> 제2정규형
-> 제3정규형
순서로 진행되는 방식임.제1정규화
를 한다 라고 일컬음의미 : 각 행의 의미가 원자적이어야 한다
: 각 행이 값을 하나만 가져야 한다
예시 : SELECT * FROM topic WHERE tag = 'free'
라는 걸 사용하고 - 싶을 때, tag
행에 값이 여러개 들어 있으면 사용할 수 없음.
정규화 이유 : 데이터를 사용하거나 JOIN하는 것이 어렵거나 불가능함
=> 😎 대안 : 테이블을 쪼개기 !
1. topic
테이블과 tag
테이블의 Cardinality
관계를 살피기.
: 1:1? 1:N? M:N?
2. M:N이면 테이블 쪼개는 것만으로 안되고 맵핑(연결) 테이블을 만들어 주어야 함.
3. 맵핑 테이블 : 각각의 테이블에서 PK
를 가져와서 넣어줌.(ex. topic_title
, tag_id
) 어떤 테이블에서 가져왔는지 이름에서 명시해주면(title
대신 토픽에서 온 타이틀이라는 뜻에서 topic_title
) 명료해짐
topic
테이블의 존재의의는 무엇?price
때문임. 가격은 그 type
이 무엇인지에 따라 달라짐title
, type
, price
를 위한 표이지 나머지 컬럼들과는 관련 없음=> 😎 대안 : 부분적으로 종속되는 컬럼들만 모으고, 전체적으로 종속되고 있는 컬럼들을 쪼개기!
topic
테이블 만들기 : 부분적으로 종속되는 정보들만 가져오기topic_type
테이블 만들기의미 : 이행적 종속성. 다른 대상에게 무언가를 이행하라!
author_id
는 title
에 의존하고 있음
author_name
, author_profile
은 author_id
값에 의존하고 있음
이러한 것을 이행적 종속성
이라고 함
중복을 만들어내는 부분을 따로 author
테이블을 만듦.
💎 주의 : FK는 중복으로 치지 않음