정규화 - Effective SQL

2021. 11. 12. 15:24SQL

728x90

1. 제3정규화 보다 부족하다면 더 정규화하자

  • 최대한 정규화 한 후 어플리케이션이 제대로 돌아갈 때까지 역정규화 하라
    • 실제로 현장에서는 3정규화까지 하는 경우가 대다수
    • 3정규화까지 진행하면, 대부분의 경우 그 이상의 정규화 단계까지 완료되기 때문
    • 3정규화로 설계했으나, 한 테이블이 두 개 이상과 관계를 맺을 때, 다 대 다 관계가 둘 이상일 때. 더 높은 정규화를 위반할 수 있는 복합키가 있을 때, 대리키 대신 자연키를 분석할 때
  • 제 4 정규화 : 다치종속 - 서로 독립적이지만 관계에서 통일 한 뒤 키에 의존하는 경우 
    • 한 엔티티에서 관계없는 두 속성으로 모든 조합을 해당 엔티티에서 열거하는 경우 위반될 수 있음.
  • 제 5 정규화 : 조인종속 - 테이블을 분해하면 원래 가지고 있던 정보가 손실되어서 더이상 테이블을 분해할 수 없는 경우
    • 키가 복합 키일 경우 후보키에 유효한 값이 무엇인지 제약할 수 있어야함.
  • 무손실 분할 테스트
    • 테이블의 컬럼이 많으면 일련의 부분집합으로 분할한다.
    • 부분집합에 대해 조인하여 재결합한 결과가 데이터 손실이 없다면 상위 정규화를 위반한 것으로 볼 수 있다.
      • SELECT DISTINCT ~ LEFT OUTER JOIN ~

 

2. 데이터 웨어하우스는 역정규화를 사용하자

 

728x90

'SQL' 카테고리의 다른 글

[SQL] Oracle. Dual 테이블  (0) 2022.01.10
[SQL] JOIN - INNER JOIN vs OUTER JOIN and CORSS JOIN)  (0) 2022.01.06
1. SQL 데이터 모델 설계 - Effective SQL  (0) 2021.05.21