컴퓨터공학/데이터베이스

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

NIMHO 2022. 11. 12. 22:12
728x90

복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.

잘못 설계된 데이터베이스

같은 학번이 나타날 때마다 학년 애트리뷰트 값도 똑같이 중복적으로 나타난다.

 

이상(anomaly) 현상

검색할 때는 상관없고, 변경(삭제, 삽입, 갱신)할 때 이상현상이 나타난다.

  • 삭제 이상(deletion anomaly)
    • 학번 3654 고영준 학생이 과목 'CO234'의 등록을 취소할 때 => 4학년이라는 정보도 함께 삭제된다.
    • 연쇄 삭제(triggered deletion)에 의해 정보가 영원히 손실되는 현상이다.
  • 삽입 이상(insertion anomaly)
    • 학번이 7654, 학년이 3인 학생을 삽입할 때 => 어떤 과목을 등록하지 않는 한 삽입이 불가능하다.
      • 학번, 과목 코드가 기본키이기 때문이다.
    • 과목 정보가 없는 데도 불구하고 입력할 수 없는 이상 현상이 발생한다.
  • 갱신 이상(update anomaly)
    • 학번 4652인 학생의 학년을 4에서 3으로 변경하려고 할 때 => 4개의 튜플을 모두 변경해야 한다.
    • 중복 데이터의 일부만 갱신으로 정보의 모순성(inconsistency)이 발생한다.
728x90

이상 현상의 원인과 해결책

발생하는 이유는?

여러 가지 상이한 정보를 가지고 있는 애트리뷰트들을 무리하게 하나의 릴레이션으로 표현하였기 때문이다.

 

문제 해결 방법

애트리뷰트들 간의 종속성을 분석해서 하나의 릴레이션에는 하나의 종속성만 표현되도록 테이블을 분해한다.

학번에 대해 성명, 학년이 종속 관계를 나타내고, 학번과 과목 코드에 대해 성적이 종속 관계를 나타내고 있다.

이러한 두 개 이상의 릴레이션을 분해하는 과정정규화(normalization)라고 한다.

 

함수 종속성

학생(학번, 성명, 학과, 전화번호)에서 성명, 학과, 전화번호는 학번에 각각 함수 종속(FD : Functional Dependency)이다.

왜냐하면, 학번이 정해지면 이에 대응하는 성명, 학과, 전화번호의 값은 오직 하나만 있기 때문이다.

기호로 표시 : 학번 -> (성명, 학과, 전화번호)

 

즉, 함수 종속이란? 어떤 릴레이션 R에서 애트리뷰트 A의 값 각각에 대해 항상 애트리뷰트 B의 값이 오직 하나만 연관되어 있다면, B는 A에 함수 종속된다고 하고 A -> B로 표기한다.

함수 종속 다이어그램 (FD Diagram)

기본 키 : { 학번, 과목 코드 }

 

완전 함수 종속과 부분 함수 종속

등록 릴레이션의 함수 종속 관계는 세 개가 존재한다.

  • {학번, 과목 코드} -> 성적
  • 학번 -> 성명
  • 학번 -> 학년

즉, 성적은 학번, 과목 코드에 함수 종속이 되고, 성명과 학년은 학번에 함수 종속이 된다.

 

'성적'은 {학번, 과목 코드}에 완전 함수 종속(full functional dependency) 되었다고 한다.

'성명'과 '학년'은 '학번'에 완전 함수 종속되었다.

성명과 학년은 {학번, 과목 코드}에 부분 함수 종속(partial functional dependency)되었다고 한다.

728x90