DKNF 즉, 도메인- 키 정규형을 뜻한다.
상당히 많은 자료가 있으나 (영문) 한글이 없다.
그래서 나름대로 필자의 지식과 여러 책을 조합하여 글을 적어본다.
도메인-키 정규형(DKNF)의 아이디어는 모든 가능한 종류의 종속성과 제약조건을 고려하는 궁극적 정규형을 정의하는 것이다.
어떤 릴레이션에서 지켜져야 되는 모든 제약조건과 종속성들이 단순히 그 릴레이션에 대한 도메인 제약조건과 키 제약조건만
지켜질 때 그 릴레이션은 도메인-키 정규형에 속한다고 한다.
도메인-키 정규형(DKNF)에 속하는 릴레이션에 대해서는 투플 내의 각 에트리뷰트 값이 적절한 도메인에 속하고, 모든 키 제약
조건이 지켜지고 있는지 만을 확인 함으로써 모든 데이터베이스 제약조건이 지켜지고 있음을 간단하게 알 수 있다.
첫번째 예시를 보면 다음과 같다.
다음과 같이 특별한 통장이 있다고 생각해보자.
계좌번호가 9로 시작하며 최소 잔고가 2500원 (무조건)인 통장은 이자를 더 준다.
이러한 상황이 있을때 도메인 키 정규형을 이용하여 다음과 같이 만들수 있다.
Regular-acct-schema = (지점명,계좌번호,잔고)
Special-acct-schema = (지점명,계좌번호,잔고) → 도메인 제약조건 (계좌번호 9로 시작,잔고2500이상)
결국 Special-acct-schema 의 제약조건이 지켜짐으로 인해서 도메인-키 정규형(DKNF)에 속한다고 할 수 있다.
두번째 예시를 보면 다음과 같다.
두번째 예시는 실제적으로 DKNF가 실제적으로 잘 사용되지 못하는 이유를 보여준다. 물론 DKNK 정규형을 적용한 것이다.
제조사 = T,R 이며 제조국= 일본 경우에는 차번호(고유번호)의 첫번째 자리가 J이다.
제조사 = H,A 이며 제조국= 일본 경우에는 차번호(고유번호)의 두번째 자리가 J이다.
이와 같은 제약조건을 검사하는 일반적인 함수를 작성하지 않고는 이런 제약조건들을 표현 할 수 있는 간단한 방법이 존재하지 않는다.
필자의 생각을 정리하면 DKNF는 도메인에서 키를 정규화 함으로써 (도메인에서 키의 제약조건을 걸어버림) 정규화를 진행 하는 것으로생각된다.
참조 : Fundamentals of Database System / 서울 산업대학교 전자계산학과 석상기 교수님 강의자료