오늘 회사에서 내가 예상하는 DB 테이블을 표로 그려서 이런식으로 저장되지 않냐고 물었더니 이미 다 정규화가 되어있다고 하셨다.
그 당시 테이블을 잘개 쪼개 놓은 듯한 느낌이었는데 책과 검색을 통해 이번에 얕게 정리해보려한다.
정규화
- 데이터 중복성을 최소화
- 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정
- 정규화 수준이 높을 수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아진다
- 반면 정규화가 높을 수록 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다.
목적
(DB의 행(Row) == 튜플(Tuple) == 레코드(Record))
정규화 원칙
- 정보 무손실 표현
- 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 된다.
- 분리의 원칙
- 하나의 독립된 관계성은 하나의 독립된 관계로 분리시켜 표현해야 한다.
- 데이터의 중복성이 감소되어야 한다.
반정규화
- 테이블 통합
- 두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능향상에 도움이 될 경우에 수행
참고 문헌