Study/데이터베이스

6장 - 정규화 (1)

석사한 화이트핸드 2024. 11. 21. 03:22
728x90
반응형

출처 : http://www.kocw.net/home/cview.do?lid=683ad55ac1e3fc35

 

데이터베이스의 원리와 응용

본 강의에서는 데이터베이스 입문자들에게 꼭 필요한 데이터베이스 기초 이론, 데이터 모델과 연산, SQL, 데이터베이스 설계에 대해 공부하고자 한다.

www.kocw.net

 

 

이전 장에서는 데이터베이스 설계 단계를 살펴보았다. 이번 장에서는 정규화를 통해 어떻게 데이터베이스를 올바르게 설계할 수 있는 지를 학습한다.

 

  1. 정규화의 개념과 이상 현상
  2. 함수 종속
  3. 기본 정규형과 정규화 과정

 

 

학습 목표

  • 정규화의 필요성과 이상 현상의 의미를 이해한다.
  • 정규화를 수행하기 위해 함수 종속성의 개념을 이해한다.
  • 정규형의 유형과 관계를 이해하고, 실제 예를 통해 정규화 과정을 연습해본다.

 

정규화의 개념과 이상 현상

이상(anomaly) 현상

  • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용. 즉, 데이터베이스를 설계할 때, 릴레이션의 구조가 잘못되어 발생하는 부작용.

 

정규화

  • 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정

 

 

이상 현상의 종류

 

이상 현상은 크게 3종류로 나뉜다.

  • 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
  • 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
  • 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

 

 

삽입 이상(Insertion anomaly)

  • 릴레이션에 새 데이터를 삽입하려면 불필요한 데이터도 함께 삽입해야 하는 문제
  • 위 그림에서 아직 이벤트에 참여하지 않은 아이디가 "melon"이고, 이름이 "성원용", 등급이 "gold"인 신규 고객의 데이터는 이벤트참여 릴레이션에 삽입할 수 없다. 삽입하려면 실제로 참여하지 않은 임시 이벤트 번호를 삽입해야 한다.

 

 

갱신 이상(Update anomaly)

  • 릴레이션의 중복된 튜플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 문제
  • 위 그림에서 아이디가 "apple"인 고객의 등급이 "gold"에서 "vip"로 변경되었는데, 일부 튜플에 대해서만 등급이 수정된다면 "apple" 고객이 서로 다른 등급을 가지는 모순이 발생한다.

 

 

삭제 이상(Deletion anomaly)

  • 릴레이션에서 튜플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제
  • 위 그림에서 아이디가 "orange"인 고객이 이벤트 참여를 취소해 관련 튜플을 삭제하게 되면 이벤트 참여와 관련이 없는 고객아이디, 고객이름, 등급 데이터까지 손실된다.

 

정규화

  • 이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
  • 함수적 종속성을 판단하여 정규화를 수행한다.

 

함수적 종속성(FD : Functional Dependency)

  • 속성들 간의 관련성
  • 함수 종속성을 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해하여 이상 현상이 발생하지 않는 바람직한 릴레이션으로 만들어 나가는 과정이 정규화

 

 

함수 종속

  • X가 Y를 함수적으로 결정한다.
    • 데이터베이스에서 특정 속성(또는 속성들의 집합)의 값이 다른 속성의 값에 의해 유일하게 결정되는 관계를 의미한다. 즉, 한 속성의 값이 정해지면 다른 속성의 값도 자동으로 결정되는 관계이다.
    • X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합
    • "Y가 X에 함수적으로 종속되어 있다"와 같은 의미
    • X →Y로 표현 (X는 결정자, Y는 종속자)

함수 종속이 중요한 이유

  • 데이터 무결성 : 데이터 무결성을 유지할 수 있다
  • 정규화 : 데이터 중복을 제거하는 정규화 과정에 활용할 수 있다
  • 쿼리 최적화 : 쿼리를 효율적으로 처리할 수 있다.

 

함수 종속 관계 판단 시 유의사항

  • 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 한다.
    • 속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값만으로 판단하면 안된다.
  • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정한다.
    • 기본키와 후보키는 해당 레코드를 유일하게 식별하는 역할을 한다. 다른 속성들의 값은 기본키나 후보키에 의해 결정되므로, 기본키와 후보키를 결정자로 사용하면 데이터 정확성을 유지할 수 있고, 데이터의 중복을 방지하고, 데이터베이스의 일관성을 유지할 수 있게 된다.
  • 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있다.

 

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

  • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종석되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 정속되지 않음을 의미한다.
  • 일반적으로 함수 종속은 완전 함수 종속을 의미한다.
  • 예를 들어, 당첨 여부는 {고객 아이디, 이벤트번호}에 완전 함수 종속된다.

 

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

  • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
  • 예를 들어, 고객 이름은 {고객 아이디, 이벤트번호}에 부분 함수 종속된다.

 

 

이행적 함수 종속(Transitive FD)

  • 릴레이션을 구성하는 3 개의 속성 집합 X, Y, Z에 대해 함수 종속 관계 X → Y와 Y → Z가 존재하면 논리적으로 X → Z가 성립되는데, 이것을 Z가 X에 이행적으로 함수 종속되었다고 한다.

 

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

  • 결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것처럼 당연한 함수 종속 관계는 고려하지 않는다.
  • ex. 고객 아이디 → 고객 아이디, {고객 아이디, 이벤트 번호} → 이벤트 번호

 

 

728x90
반응형