📚좋은 릴레이션과 나쁜 릴레이션

  • 나쁜 릴레이션과 잘못된 데이터베이스 모델링
  1. 데이터 중복
    데이터의 중복 저장으로 데이터베이스의 일관성 유지 어려움과 저장 공간 낭비

  2. 갱신 이상

    • 삽입 이상: 레코드 추가 시 불필요한 컬럼의 값 없이는 추가하지 못하는 경우
    • 삭제 이상: 삭제 시 의도하지 않았던 다른 데이터가 삭제되는 경우
    • 수정 이상: 중복 저장된 레코드를 수정 시 모두 반영이 안되어 데이터베이스의 일관성이 깨지는 경우


  • 좋은 릴레이션
  1. 컴퓨터 프로그래머적 관점에서의 모델링
  2. 릴레이션의 스키마가 얼마나 효율적으로 실세계를 반영하는지 평가
  3. 고려사항
    • 한 릴레이션 내의 컬럼 간의 관계 분석
    • 원하지 않는 데이터의 종속과 중복 제거
    • 새로운 컬럼들이 데이터베이스에 추가될 때, 기존 컬럼과의 관계 수정을 최소화


  • 정규화
    정규화는 관계형 모델에서 논리 스키마를 효과적으로 모델링하는데 이용되는 기법입니다.
  1. 한 릴레이션 내의 컬럼들 간의 관계 표현
  2. 불필요한 데이터의 종속과 중복 제거
  3. 새로운 컬럼 추가 시 기존 컬럼과의 관계 수정을 최소화




📚함수적 종속성

📄함수적 종속성의 정의

함수적 종속성은 릴레이션 인스턴스를 분석하여 속성들 간의 값의 연관관계를 표현한 것으로, 특정 시점의 릴레이션 인스턴스를 분석하여 파악할 수 있습니다.

릴레이션의 효율성을 향상시켜 좋은 릴레이션으로 변환하는데 이용되는 중요한 개념입니다.

FunctionalDependency

표를 보면 등급에 따라 할인율이 결정된다는 것을 알 수 있습니다. 이것을 할인율은 등급에 함수적으로 종속된다라고 합니다.

{등급} -> {할인율}

좌측 속성을 결정자, 우측 속성을 종속자라고 합니다.



📄함수적 종속성의 추론 규칙과 카노니컬 커버

  • 함수적 종속성의 확장
    1. 함수적 종속성은 릴레이션의 효율성 여부에 중요한 판단 기준
    2. 릴레이션의 인스턴스만으로 내재된 모든 함수적 종속성을 찾아내기 어려움
    3. 판별되지 않은 모든 함수적 종속성을 찾기 위해 추론 규칙을 사용하여 함수적 종속성을 확장
    4. 클로저(closure)
    • 판별된 함수적 종속성 집합으로부터 유추할 수 있는 모든 함수적 종속성 집합


  • 함수적 종속성의 추론 규칙
    -암스트롱 공리
    1. 재귀성 규칙
    2. 부가성 규칙
    3. 이행성 규칙
    4. 분해 규칙
    5. 합집합 규칙
    6. 의사 이행성 규칙


  • 함수적 종속성 판별

FunctionalDependency

함수적 종속성을 판별할 때 레코드는 같은 것일 때 같아야 하지만 레코드가 같지 않을 때는 고려하지 않아도 된다라는 규칙을 생각해보면 이 표에서 아래는 모두 함수적 종속성을 만족합니다.

{고객번호} -> {고객명}
{고객명} -> {등급}
{고객번호, 고객명} -> {할인율}

함수적 종속성의 추론 규칙을 가지고 {고객번호}->{고객명, 등급, 할인율} 과 같은 함수적 종속성을 추론해볼 수 있습니다.


  • 카노니컬 커버
    카노니컬 커버는 불필요한 함수적 종속성을 제거하여 종속 정보에 대한 손실 없이 간소화된 함수적 종속성 집합입니다.
  1. 함수적 종속성 추론 규칙으로 확장된 클로저에는 자명한 종속성(의미가 당연한 A->A)과 중복된 종속성(의미가 여러번 존재 X->AB, X->B)을 포함

  2. 불필요한 함수적 종속성을 제거한 표준형으로 변환 후 정규화를 수행

  3. 표준형 조건

    • F의 모든 함수적 종속성의 오른쪽 속성(종속자)은 반드시 1개
    • F에서 X->A를 X를 진부분집합 Y에 대하여 Y->A로 교체했을 때, 그 집합이 F와 동등한 집합이 불가능
    • F에서 어떤 함수적 종속성을 제거했을 때, 그 집합이 F와 동등한 집합이 불가능




📚기본 정규형

  • 정규형
    1. 이상 현상을 최소화 하도록 특정 조건을 갖춘 릴레이션의 형식
    2. 정규형의 분류(제1, 제2, 제3, BC, 제4, 제5 정규형)


정규화는 특정 정규형의 조건을 만족하도록 릴레이션과 속성을 재구성하는 과정을 말합니다.

  • 정규화의 목적
    1. 데이터베이스 내에 모든 릴레이션을 효과적으로 표현
    2. 간단한 관계 연산에 기초하여 검색 알고리즘을 효과적을 작성할 수 있도록 지원
    3. 바람직하지 않은 삽입, 수정, 삭제 등의 이상 발생 방지
    4. 새로운 형태의 데이터가 삽입될 때 릴레이션 재구성의 필요성을 축소

📄제 1 정규형

제1정규형은 가장 조건이 단순한 정규형입니다. 또한 관계형 모델에 조건에 따라 자동 적용되는 정규형입니다. 제1정규형은 릴레이션 스키마에서 정의된 모든 속성의 도메인이 원자값을 갖는 상태입니다.

Need1NF

위 표를 제1정규화하면 아래와 같은 릴레이션이 됩니다.

1NF



📄제 2 정규형

  • 함수적 종속성 다이어그램(FDD)
    릴레이션 내의 속성간의 종속 관계를 직관적이고 이해하기 쉽게 도식화 한 표현 방식입니다. 직사각형은 속성 또는 속성 집합을 의미하고 화살표는 함수적 종속성을 나타냅니다.

FDD

제2정규형은 릴레이션이 제1정규형을 만족하고 기본키의 부분집합이 특정 속성을 종속하고 있지 않은 상태를 말합니다. 다른 말로하면 주어진 릴레이션의 인스턴스가 기본키가 아닌 속성들이 기본키에 완전히 종속되어 있는 상태를 의미합니다.

위 다이어그램에서 출항시간, 목적, 담당도선사는 기본키에 완전히 종속되어 있지만 도크관리자는 기본키에 완전히 종속되어 있지 않고 부분적으로 종속되어 있습니다.

제2정규화는 릴레이션에서 부분종속은 중복을 야기시키므로 부분종속 컬럼을 따로 빼내서 기본키에 완전히 종속되도록 릴레이션을 분해하는 것입니다.

릴레이션을 잘못 분해하면 손실 분해가 일어납니다. 손실 분해가 일어나면 분해했던 릴레이션을 다시 합쳤을 때 원래 상태로 돌아가지 못합니다. 따라서 릴레이션을 분해할 때 원래의 릴레이션으로 복원 가능한 무손실 분해가 필요합니다.

  • 무손실 분해
    1. 무손실 분해: 스키마 R에 함수적 종속성 X->Y가 존재하고 X ∩ Y = ∅이면, R을 R-Y와 XY로 분해

    2. 도크관리 릴레이션 무손실 분해 {도크번호}->{도크관리자} {도크번호} ∩ {도크관리자} = ∅

도크 릴레이션을 무손실 분해하면 아래와 같이 두개의 릴레이션으로 분해할 수 있습니다.

2NF



📄제 3 정규형

제3정규형은 릴레이션이 제2정규형을 만족하고, 기본키가 아닌 속성들이 어떤 키에도 이행적으로 종속되지 않은 상태를 말합니다.

A->B, B->C 일 때 A->C 인 함수적 종속성을 이행적 종속성이라고 합니다.

도크 릴레이션에서 보면 {도크번호, 입항시간}->{목적}, {목적}->{담당도선사}, {도크번호, 입항시간}->{담당도선사} 와 같이 이행적 종속성이 있는 것을 알 수 있습니다.

제3정규형을 만들기 위해 이행적 종속성을 끊어내야 합니다. 제2정규형의 함수적 종속성 다이어그램에서 이행적 종속석을 제거하여 수정하면 아래와 같습니다.

3NF

제3정규형을 만족하는 새 릴레이션은 다음과 같습니다.

3NFrelation



📄BC 정규형

BC 정규형은 릴레이션이 제3정규형을 만족하고 릴레이션에 성립하는 X->Y 형태의 모든 함수적 종속성에 대하여 X가 수퍼키인 상태를 말합니다.

BC 정규형은 기본키가 아닌 속성이 다른 속성을 결정하지 못하도록 합니다. 제3정규화의 함수적 종속성 다이어그램을 보면 {목적}->{도크번호}에 대해 {목적}은 수퍼키가 아닙니다. 따라서 이 릴레이션을 분해하여 릴레이션 내의 모든 함수적 종속성의 결정자가 수퍼키가 되도록 만들어야 합니다.

BCNF

BC정규화한 릴레이션은 다음과 같습니다.

BCNFrelation




📚역정규화

정규화는 릴레이션 분할을 통해 데이터의 중복성을 최소화하는 과정입니다. 하지만 사용 과정에서 많은 조인연산을 유발하여 DBMS의 성능이 느려질 수 있습니다. 역정규화는 정규화의 반대 과정으로 정규화를 통해 분리되었던 릴레이션을 통합하는 구조의 재조정을 통하여 정보의 부분적 중복을 허용하는 기법입니다. 정규화되지 않은 스키마와 역정규화 스키마는 전혀 다릅니다. 효율적인 역정규화를 위해 우선 스키마가 정규화되어 있어야 합니다.

📄역정규화의 방법

  • 릴레이션의 병합
  • 릴레이션의 수직분할
  • 릴레이션의 수평분할
  • 유도 속성 추가



📄역정규화의 단점

역정규화는 상황에 따라 시스템 성능저하를 일으킬 수 있습니다. 역정규화를 통해 어느 정도 정규화된 형태의 스키마를 포기하고 중복된 데이터를 늘리면 읽기 성능이 향상되지만, 중복된 데이터의 저장을 위한 추가 공간의 요구와 중복된 데이터의 일관성을 유지하기 위해 쓰기 성능의 속도는 저하될 수 있습니다.



Leave a comment