정규형

데이터베이스/데이터베이스 개념정리

2020. 3. 5. 13:20

1. 제1 정규형 (1 Normal Form)

  • 정의
    • 하나의 투플의 한 애트리뷰트 값으로 값들의 집합 값들의 투플, 그리고 이들의 조합을 허용하지 않는다
      • 허용하는 유일한 형태는 원자값이다!
  • 예시

- Dnumber는 기본키이고 점선은 다치 애트리뷰트를 뜻한다
- Dlocations가 원자값이 아닌 다중의 값들의 조합이므로 제1 정규형을 위반한다
  • 제1 정규형을 만족하게 하는 3가지 방법
    • 제1 정규형을 어긴 애트리뷰트를 제거하고 이를 기본키와 함께 별도의 릴레이션에 추가한다
      • 가장 완벽한 방법이다
    • 기본키를 확장하여 원래의 릴레이션에 별도의 투플을 두는것
      • 중복이 발생한다
    • 애트리뷰트가 가질수 있는 값들의 최대 개수를 알 수 있다면 개수만큼 애트리뷰트를 쪼개는것
      • NULL이 많이 들어 가고 순서의 의미가 추가되어 의도치 않은 설계가 된다
      • EX) A -> A1,A2,A3 로 쪼개는 행위
  • 제1 정규형으로 분해하는 방법

- Dnumber을 외래키로 Dlocation과 별도의 릴레이션을 만들어 추가한다

제2 정규형 (2 Normal Form)

  • 정의
    • 완전 함수적 종속성에 기반을 둔다
      • 완전 함수적 종속성이란?
        • X -> Y에서 X의 임의의 애트리뷰트 A를 제거했을 때 X -> Y 가 성립하지 않는경우
        • 성립한다면 **부분 종속성**이라 한다
    • 릴레이션 스키마 R의 모든 비주요 애트리뷰트들이 R의 기본키에 대해 **완전하게 함수적으로 종속**하면 R은 제2 정규형이다.
  • 예시

SSN , Pnumber 두 애트리뷰트가 하나의 기본키로 설정되어 있다. 하지만 SSN이나 Pnumber 단독으로 (부분키라 한다) 다른 애트리뷰트를 결정하는 경우가 생기므로 제2 정규형을 만족하지 못한다!

  • 제2 정규형으로 분해하는 방법

부분키에 의해 결정되었던 애트리뷰트들을 부분키와 함께 새로운 릴레이션을 생성새로운 릴레이션에서 각 부분키는 기존 릴레이션의 기본키의 외래키가 된다!

제3 정규형 (3 Normal Form)

  • 정의

    • 이행적 종속성의 개념에 기반을 둔다
      • 이행적 종속성이란?
        • R에서 후보키가 아니고 어떤 키의 부분집합도 아닌 애트리뷰트들의 집합 Z가 존재하여 X -> Z , Z -> Y가 만족될 때 함 수적 종속성 X -> Y를 이행적 종속성이라 한다
  • R이 제2 정규형이고 R의 어떤 비주요 애트리뷰트도 기본키에 이행적으로 종속하지 않으면 R은 제3 정규형이다

  • 예시

  • 기본키가 아닌 Dnumber에 의해서 Dname, Dmgr_SSN이 결정된 모습

  • 제3 정규형을 만족시키지 못한다

  • 제3 정규형으로 분해하는 방법

  • 문제가 되는 Dnumber를 분해하여 종속되어 있던 애트리뷰트들과 함께 새로운 릴레이션을 생성
  • Dnumber는 기존의 릴레이션의 외래키가 된다

BCNF (Boyce-Codd Normal Form)

  • 정의
    R에서 모든 의미있는 함수적 종속성 X -> A를 만족할 때마다 X는 R의 수퍼키라면 R은 BCNF다.
  • 수퍼키란?
    • 먼저 키는 '최소의 수퍼키'이다. 즉 수퍼키 내의 어떤 애트리뷰트도 제거하지 않아야 유일성 제약조건을 만족시킬 수 있다.
  • 수퍼키의 특징
    • 같은 값을 가지는 서로 다른 투플이 존재하지 않는다.
    • 모든 릴레이션은 적어도 하나의 수퍼키를 갖는다.
    • 수퍼키는 중복된 애트리뷰트들을 가질수 있으므로 이런 중복성을 갖지 않는 개념인 가 필요하다.
  • 수퍼키 예시
ESSNPnoHours
123456789132.5
12345678927.5

ESSN,Pno의 조합은 수퍼키이면서 키이다. ESSN,Pno,Hours의 조합은 수퍼키이지만 키는 아니다.
위의 릴레이션은 Hours를 포함하지 않아도 식별가능한 유일한 데이터라는 것

  • BCNF 분해에 대한 함수적 의존성은 충족시킬 수 없지만 비부가적 조인 속성을 충족 시켜야한다.

  • BCNF는 제3 정규형보다 조금 더 엄격한 제약조건을 가진다.

  • BCNF는 모든 결정자가 KEY인 경우를 말한다

  • 일반적으로 BCNF를 위반하는 경우는 거의 없다. 제3 정규형까지 충족시킨 이상 위반이 일어나는 상황이 잦지 않기 때문이다.

  • BCNF 예시

  • 위의 예제는 3NF를 만족한다. 기본키가 아닌 모든 애트리뷰트가 이행적 함수 종속이 되지 않기 떄문이다.
  • 3NF와의 차이점은 기본키가 아닌 'C'가 수퍼키인 'B'를 가리킨다는 것이다.

'데이터베이스 > 데이터베이스 개념정리' 카테고리의 다른 글

트랜잭션  (0) 2020.02.23
인덱스  (0) 2020.02.23