티스토리 뷰
정규화란?
정제되지 않은 데이터(표)를 관계형 데이터베이스에 어울리는 표로 만들어 주는 방법
제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
'Database' 카테고리의 다른 글
우아한테크캠프 Pro 5기 - Redis에 저장 중 LocalDateTime 데이터타입에서 SerializationException 발생 (5) | 2023.01.31 |
---|---|
역정규화(denormalization) (0) | 2022.06.27 |
리눅스에서 MariaDB 설치 및 기본 설정 (0) | 2021.03.31 |
윈도우에서 mariaDB 서버 on/off (0) | 2020.12.28 |
MariaDB 사용법 및 기본 쿼리문 (0) | 2020.12.21 |