본문 바로가기

학교수업/데이터베이스

[데이터베이스] 9. 정규화

정규화의 개념과 이상 현상

 

이상(Anomaly) 현상

  • 불필요한 데이터 중복으로 릴레이션에 대한 삽입, 수정,삭제 연산 수행시 발생할 수 있는 부작용
  • 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
  • 갱신 이상: 중복 투플 중 일부만 변경하여 데이터가 불일치하는 모순 문제
  • 삭제 이상: 투플 삭제시 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

>>정규화의 필요성

 

정규화(Normalization)

  • 이상현상을 제거하며 데이터베이스를 올바르게 설계하는 과정
  • 이상현상이 발생하지 않도록 릴레이션을 분해(decomposition)하는 과정
  • 함수적 종속성을 판단하여 정규화 수행
  • 함수 종속을 이용해 릴레이션을 연관성 있는 속성들로만 구성되도록 분해, 이상현상이 발생하지 않는 올바른 릴레이션으로 만드는 과정
  • 정규화 목표: 관련없는 함수종속성은 별개의 릴레이션으로 표현

 

정규화 주의사항

  • 무손실 분해(nonloss decomposition)을 원칙으로 진행
  • 의미상 동등한 릴레이션들로 분해되어야 함
  • 분해로 인한 정보 손실이 발생하지 않아야
  • 분해된 릴레이션들이 자연 조인으로 복원 가능해야

 

함수종속(FD; Functional Dependency)

릴레이션을 구성하는 속성들 간의 관련성

 

"x가 y를 함수적으로 결정한다."

x,y는 하나의 릴레이션 구성하는 속성들의 부분집합

릴레이션 내 모튼 투플에서 하나의 x에 대해 y값도 하나인 조건 만족

y가 x에 함수적으로 종속되어있다.

x(결정자)  --> y(종속자)

함수 종속 판단의 예1

고객아이디 속성 값에 대응되는 고객이름 속성과 등급 속성 값이 단 하나인 조건을 만족하여 고객이름과 등급(y)은 고객아이디(x)에 함수적으로 종속됨

 

함수 종속 관계

 

함수 종속 관계를 도식화하여 표현한 함수 종속 다이어그램

함수 종속 판단시 유의사항

  • 속성 자체의 특성, 의미를 기반으로 함수 종속성을 판단해야함
  • 속성값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성값만을 고려하여 판단하면 안됨
  • 일반적으로 기본키, 후보키(x)는 릴레이션의 다른 모든 속성들(y)을 함수적으로 결정 
  • 기본키나 후보키가 아니어도 다른 속성값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음

 

함수 종속 판단 예2

고객이름은 {고객아이디, 이벤트번호}의 일부분인 고객아이디에 종속되어 있음

고객이름은 {고객아이디, 이벤트번호}에 부분 함수 종속됨

당첨여부는 {고객아이디, 이벤트번호}에 완전 함수 종속됨

 

완전 함수 종속(FFD, Full Functional Dependency)

속성 집합 y가 속성집합 x에 함수적으로 종속되어 있지만, 속성집합 x의 일부분에 대해서는 종속되어 있지 않음

 

부분 함수 종속(PFD, Partial Functional Dependency)

속성집합 y가 속성집합 x의 전체가 아닌 x일부분에 대해 함수적으로 종속됨

 

함수 종속 관계를 고려할 필요가 없는 경우

결정자와 종속자가 같거나 결정자가 종속자를 포함하는 경우

 

기본 정규형과 정규화과정

정규화(Normalization)

위 참고

 

정규형(NF, Normal Form)

  • 릴레이션이 정규화된 정도
  • 각 정규형마다 제약조건이 존재
  • 차수가 높을수록 요구 제약조건이 많고 엄격함
  • 릴레이션의 특성 고려해 적합한 정규형 선택하기

정규형의 종류와 관계

제1정규형( 1NF; First Normal Form)

  • 릴레이션의 모든 속성이 더는 분해되지 않는 원자값(atomic value)
  • 제 1 정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음
  • 제 1 졍규형을 만족해도 데이터 중복으로 이상 현상이 발생할 수 있음
    • 기본키인 {고객아이디, 이벤트번호}에 완전 함수 종속되지 못하고 일부분인 고객아이디에만 종속되는 속성(등급, 할인율)존재 >> 부분 함수 종속 해결되도록 이벤트참여 릴레이션 분해 >> 분해 릴레이션 제 2 정규형에 속함

제2정규형( 2NF; Second Normal Form)

  • 릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되는 경우
  • 제1 정규형에 속하는 릴레이션이 제 2 정규형을 만족하게 하려면 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해
  • 제 2 정규형은 만족하지만 이상 현상이 발생 : 이행적 함수 종속
  • 해결: 이행적 함수 종속이 제거되도록 고객 릴레이션 분해, 분해된 릴레이션들은 제3 정규형
  • 이행적 함수 종속(Trnasitive FD)
    • 릴레이션 구성하는 3개의 속성 집합 X,Y,Z에 대해 함수 종속 관계 X->Y, Y->Z가 존재하면 논리적으로 X->Z가 성립되는데 이를 Z가 X에 이행적으로 함수 종속되었다고 함.

제3정규형( 3NF; Third Normal Form)

  • 레이션이 제 2 정규형에 속하고 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않는 경우

보이스/코드 정규형(BCNF; Boyce/Codd Normal Form)

  • 하나의 릴레이션에 여러 후보키가 존재하는 경우 제3정규형까지 만족해도 이상현상 발생할 수 있음
  • 강한 제3정규형(Strong 3NF)
    • 후보키를 여러개 갖고 있는 릴레이션의 이상현상 해결 위해 제3형보다 엄격한 제약조건 제시
    • 보이스코드정규형에 속하는 모든 릴레이션은 제3정규형이지만 그 반대는 아님
  • 제3은 만족하지만 보이스코드는 아닌경우: 함수 종속 관계에서 모든 결정자가 후보키가 아님. 후보키가 아님에도 속성을 결정하는 경우 이상현상 발생

 

제 4 정규형

릴레이션이 보이스코드 정규형을 만족하면서 함수 종속이 아닌 다치 종속(MVD; Multi Valued Dependency)을 제거한 경우

 

제 5 정규형

릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속(JD; JoinDependency)를 제거한 경우

 

 

정규화의 과정

정규화시 주의사항

모든 릴레이션이 제5정규형에 속해야만 바람직한 것은 아님

일반적으로 제3정규형이나 보이스코드 정규형에 속하도록 하여 데이터중복 줄이고 이상현상 해결

'학교수업 > 데이터베이스' 카테고리의 다른 글

[데이터베이스] 11. 보안과 권한 관리  (0) 2022.06.14
[데이터베이스] 회복과 병행 제어  (0) 2022.06.14
[데이터베이스] 7.4 뷰(View)  (0) 2022.06.14
SQL  (0) 2022.04.21
6장. 관계 데이터 연산  (0) 2022.04.21