티스토리 뷰

Database

정규화(normalization)

Seogineer 2022. 6. 25. 19:10

정규화란?

정제되지 않은 데이터(표)를 관계형 데이터베이스에 어울리는 표로 만들어 주는 방법

 

제1정규화(1NF) : 각 컬럼이 단일 값을 가져야 한다.

Unnoramalized form에서 SELECT * FROM topic WHERE tag = 'free' 또는 SELECT * FROM topic ORDER BY tag와 같은 쿼리를 하려고 할 때 문제점가 발생한다.

 

아래와 같이 표를 수정하면 제1정규화을 만족할 수 있지만 정보의 중복이 발생하거나 테이블 구조를 변경해야 하고 컬럼을 사용하지 않는 낭비가 발생할 수 있다.

 

Topic과 Tag의 관계는 카디널리티가 M:N이다. M:N은 테이블을 나누는 것으로 끝나지 않고 매핑 테이블을 만들어 주어야 한다.

topic의 title과 tag의 id를 키로 가져와서 매핑 테이블을 만든다.

 

제2정규화(2NF) : 부분 종속성이 없어야 한다. 즉, 표에 기본키 중에 중복키가 없어야 한다.

제1정규화를 만족하는 topic 테이블에서 description, created, author_id, author_name, author_profile 컬럼이 중복이 발생한다.

부분적으로 종속되는 컬럼들만 모으고 전체적으로 종속되고 있는 컬럼을 나눠야 한다.

 

제3정규화(3NF) : 이행적 종속성이 없어야 한다. 즉, A->B, B->C 라면 A->C가 성립하면 안 된다.

제2정규화가 완료된 topic 테이블은 author_id는 title에 의존하고 있고 author_name, author_profile은 author_id에 의존하고 있다.

 

중복이 발생하고 있는 author_id, author_name, author_profile 컬럼을 분리해서 author 테이블로 만든다.

 

topic 테이블의 author_id는 foreign key이기 때문에 중복으로 판단하지 않는다.

 

참고

https://opentutorials.org/course/3883/25301

 

댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글