🍙

Normalization for Relational DB - 2


Functional Dependency(함수 종속성)

FD(Functional Dependency)는 두 속성집합 간 제약조건이다. 관계형 디자인이 잘됐는지 확인할 수 있는 형식적 척도(formal measures)로 사용된다.

  • Relation의 정규형(normal form)을 정의할 때는 키(key)를 사용한다.
  • 두 속성 집합 XXYY에 대해서, XXYY를 'functionally determine' 한다면, XX의 값이 YY의 값을 유일하게 결정한다.
    (functionally = uniquely)

Definition

두 속성 집합 XXYY 사이의 함수 종속성(XYX\rarr Y)은 relational state rr을 형성할 수 있는 모든 튜플에 대한 제약조건을 지정한다.

제약조건: 어느 튜플이라도, r(R)r(R)에 있는 t1t_1t2t_2t1[X]=t2[X]t_1[X]=t_2[X]를 가지면, 무조건 t1[Y]=t2[Y]t_1[Y]=t_2[Y]를 가져야한다. 쉽게 말하면, XYX\rarr Y에서 YY의 값은 XX의 값에 의존한다는 뜻이다. XX의 값이 같다면, YY의 값도 무조건 같아야한다.

예) 주민등록번호 \rarr {이름, 성별}

이 제약조건은 모든 relation 인스턴스 r(A)r(A)에 대해 적용되어야 한다. 주의해야할 점은 XYX\rarr Y라고 YXY\rarr X 이 성립되지는 않는다.

KKRR의 key라고 하면, KKRR의 모든 속성을 functionally determine 한다.

FD의 주요 용도는 속성들에 항상 적용되는 제약조건을 명시함으로써 relational schema RR을 더 잘 설명하는 것이다.

FD 정의하기

FD를 정의하기 위해서는 속성들의 의미와 속성들간의 관계를 이해해야 한다. FD는 속성들의 의미를 아는 사람이 명시적으로 정의해야 한다.

FD

Normal Forms based on Primary Keys(PKs)

Relations의 정규화는 관계 스키마에 대한 일련의 테스트를 통해 특정 정규형을 만족하는지 검증한 후, '나쁜' relation들을 더 작은 relation들로 분해하면서 이루어진다.

반대로 비정규화(Denormalization)은 상위 정규형 relation의 조인을 하위 정규형 relation의 base relation으로 저장하는 것이다.

Normal Form(NF)

Relation의 키(keys)와 FD들을 이용한 조건을 통해 관계 스키마가 특정 정규형에 해당하는지 검증할 수 있다. Relation이 만족하는 가장 높은 조건이 NF 레벨이 된다.

NF의 레벨에는 1NF, 2NF, 3NF, Bocye-Codd NF(BCNF), 4NF, 5NF 등이 있다. 보통 3NF나 BCNF까지만 정규화한다.

First Normal Form(1NF)

1NF는 relation이 기본적인 관계형 모델가지면 자연스럽게 충족된다.

아래 사항들을 가지지 않으면 된다.

  • Composite attributes
  • Multi-valued attributes(MVAs)
  • Nested relations(NRs)

즉, 모든 속성들이 atomic한 값만 가져야한다.

MVA를 제거하는 3가지 방법

  • 다른 relation으로 분리한다.
  • MVA를 Key에 포함시켜서 각각 다른 튜플로 분리한다.
  • MVA의 최대 수 m을 알면, MVA를 m개의 속성으로 대체한다.

NR도 MVA와 동일하게 제거하면 된다.

Prime attribute: 후보 키의 일원이어야 한다.

Nonprime attribute: Prime attribute가 아닌 것. 어느 후보키에도 속하면 안된다.

Second Normal Form(2NF)

Full functional dependency(FFD): FD XYX\rarr YXX의 어느 속성 AA라도 제거하는 것이 dependency를 유지하지 못하게 된다면 FFD이다. 다른 말로 하면, X{A}X-\{A\}이면 XXYY를 유일하게 식별하지 못한다는 의미다.

정의

모든 nonprime attribute AA가 PK(기본 키)에 대해서 'fully functionally dependent'하다면 그 relation은 2NF에 있다고 정의한다.

아래 EMP_PROJ는 FD2와 FD3가 PK의 일부에만 종속되기 때문에 2NF를 위반한다.

image

Third Normal Form(3NF)

Transitive functional dependency: FD XZX\rarr Z가 두 FD XYX\rarr Y, YZY\rarr Z로부터 유도될 수 있다면 'transitive functional dependency'를 가진다. 여기서 YY는 nonprime attribute이다.

정의

Relation이 2NF를 만족하고, 모든 nonprime attribute가 PK에 대해서 'transitively dependent'하지 않다면, 그 relation은 3NF에 있다고 정의한다.

아래 EMP_DEPT는 모든 nonprime 속성이 Ssn에 대해 완전 함수 종속적이기 때문에 2NF를 만족한다. DnameDmgr_ssn은 아니지 않냐? 라고 할 수 있지만, Ssn을 통해 Dnumber를 결정하고, Dnumber를 통해 이 둘을 결정할 수 있기 때문에 기본키에 대해 완전 함수 종속적이라 할 수 있다. 하지만 두 속성이 SsnDnumber에 대해 transitively dependent 하기 때문에 3NF를 위반한다.

image

정리

  • 1NF: 모든 속성이 키 일부 또는 전체에 대해서 의존한다. FD 없음.

  • 2NF: 모든 속성이 전체 키에 대해 의존한다. 단, transitive property에 의해, 다른 nonprime attribute에 대한 의존성은 있을 수 있다.

  • 3NF: 모든 속성이 키 외에는 의존하지 않는다.

FD의 왼쪽에 nonkey 속성이 있으면 FD는 문제를 일으킬 수 있다.