공부
DB 고민: PK, 정규화와 역정규화
Lucy Loop
2024. 7. 1. 00:31
정규화,역정규화 + DB 스키마
테이블에서 키가 될 수 있는 조건들
- unique : 테이블 안에서 동일한 값이 없어야 함
- not null : Null값이 포함되면 안 됨
- 최소성 : 키가 너무 많으면 성능이 저하된다
- 불변성 : 다른 테이블에 참조될 수 있기 때문에 자주 변하는 것은 좋지 않다
정규화
- 1NF 컬럼이 하나의 값(원자값)을 갖도록 : 다중값을 가진 취미 컬럼을 여러 row로 펼치기
- 2NF 완전 함수 종속적이도록 : 테이블의 주제는 단 한가지. PK가 모든 데이터 하위 집단에 대해 별도의 테이블을 생성해야 함. 복합PK의 부분이 다른 컬럼을 결정하지 않아야 함 (강좌이름 → 강의실이 학생 성적 테이블에 같이 존재하는 경우 강좌이름에 의존하는 컬럼을 분리)
- 3NF 이행적 종속 없애기 : 기본 키에 변경이 있는 경우 영향을 받는 모든 데이터를 별도의 테이블로 저장해야 함. A→B B→C가 한 테이블에 존재할 때 A → C라면 AB/BC로 쪼개기
- BCNF(3.5NF, Boyce-Codd Normal Form) 중복되는 후보 키가 없음. 모든 결정자가 후보키가 되어야 함
- 4NF : 다치 종속 제거. Multi-valued Dependency: 같은 테이블 내의 두 개 이상의 컬럼이 또 다른 컬럼에 종속됨. (개발자 → 자격증,언어 ⇒ 개발자→자격증, 개발자→언어)
- 5NF : 조인 종속성 이용. Joint dependency:: 하나의 릴레이션을 분해했다가 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 경우. 다치 종속의 개념을 더 일반화 한 것임. 더이상 비손실 분해를 할 수 없을 때까지 쪼개기.
정규화 하기 전 테이블의 문제
- 중복된 데이터를 한 테이블만 수정하면 데이터 모순이 일어남
- 데이터가 쪼개져 있지 않으면, 의도하지 않은 정보도 함께 삽입해야 하거나 함께 삭제해야 함
정규화를 하는 이유
- 데이터가 중복되면 그 자체로도 DB 사이즈가 커져서 - 데이터 i/o나, db 유지에 비용이 많이 든다
- 데이터가 중복되면 무결한 데이터 관리가 어렵다
정규화를 했을 때의 문제
- 영원히 join해야 함. 테이블 관계가 복잡해진다.
역정규화를 하는이유
- DB와의 I/O는 병목이 많은 편이기 때문에 I/O의 속도를 늘리기 위해
출처
https://pupbani.tistory.com/105
https://datarian.io/blog/database-normalization
https://hstory0208.tistory.com/entry/데이터베이스-정규화Normalization란-예시를-통해-쉽게-이해해보자
https://www.purestorage.com/kr/knowledge/what-is-data-normalization.html