본문 바로가기
코딩 공부/web & Java

[SQL] 정규형

by 현장 2022. 9. 14.

정규형 (Normal Form)

-릴레이션이 정규화된 정도

-각 정규형마다 제약조건이 존재 (릴레이션 특성을 고려 적합한 정규형 선택)  : 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐

 

1. 제 1 정규형 (1NF)

  • 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값만 가지면 제 1 정규형을 만족함
  • 1 정규형을 만족해야 관계 데이터베이스 릴레이션

예시

 

※ 1NF 이상 현상의 발생 이유

  • 기본키인 {고객아이디, 이벤트번호}에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문

부분 함수 종속이 제거되도록 이벤트참여 릴레이션을 분해해서 해결 : 분해된 릴레이션은2 정규형에 속하게 됨

 

2. 제 2 정규형 (2NF)

  • 릴레이션이1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속(부분 함수 종속성 제거)되면 제 2 정규형을 만족함.

예시

2NF 이상 현상의 발생 이유

  • 이행적 함수 종속이 존재하기 때문
  • X YY Z가 존재하면 X Z 가 성립 : ZX에 이행적으로 함수 종속

 

이행적 함수 종속이 제거되도록 고객 릴레이션을 분해하여 해결 : 분해된 릴레이션은3 정규형에 속하게 됨

 

 

3. 제 3 정규형 (3NF)

  • 릴레이션이2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않으면 제 3 정규형을 만족함.

 

4. BCNF (Boyce-Codd Normal Form)

  • 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 3 정규형까지 모두 만족해도 이상 현상이 발생할 수 있음
  • 강한 제 3 정규형 ( 3 정규형보다 더 엄격한 제약조건을 제시, 결정자 제거)

보이스/코드 정규형은 제 3 정규형에 속하지만, 3 정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하는 것은 아님

 

예시

5. 제 4 정규형

  • 릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치 종속을 제거하면 제 4 정규형

 

6. 제 5 정규형

  • 릴레이션이4 정규형을 만족하면서, 후보키를 통하지 않는 조인 종속제거하면 제 5 정규형에 속함.

 

※ 정규화 시 주의 사항

  • 모든 릴레이션이5 정규형에 속해야만 바람직한 것은 아님
  • 일반적으로 제 3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결하는 경우가 많음.

 

'코딩 공부 > web & Java' 카테고리의 다른 글

[HTML] section과 article  (0) 2022.09.17
[SQL] 반정규화  (0) 2022.09.14
[SQL] 정규화  (0) 2022.09.14
[SQL] SUBSTRING, SUBSTRING_INDEX  (0) 2022.09.14
[JAVA] 추상 클래스와 인터페이스  (0) 2022.09.13