본문 바로가기

CS?/데이터베이스보안실습

[복습]데이터베이스 정규화 -3 (3NF, BCNF)

반응형

이번 포스팅은 지난시간에 이어 데이터베이스 정규형인 3NF, BCNF를 다룬다.

 

 

1. 제3정규형 (3NF)

 -릴레이션 스키마가 제2정규형이고, 릴레이션 스키마의 어떤 비주요 애트리뷰트도 기본키에 이행적으로 종속하지 않으면 릴레이션 스키마 R이 제3정규형이다.

 

즉, 후보키가 아닌 애트리뷰트에 다른 애트리뷰트들이 함수적 종속성을 가지면 안된다는 뜻이다.

 

여기 인터넷 서점 회원정보 릴레이션이 있다.

기본키인 회원번호 애트리뷰트는 '주소', '이름', '주문번호'와 함수적 종속성 관계에 있다.

 

하지만 '주문권수', '가격' 애트리뷰트는 기본키가 아닌 '주문번호' 애트리뷰트와 함수적 종속성 관계에 있다는 것을 볼 수 있다.

 

이 릴레이션에선 각 회원의 '주문권수'나 '가격'을 알기 위해 '주문번호'애트리뷰트가 중간에서 다리역할을 하고, 이것은 이행적 종속성을 가지는 것이다.

=>제3정규형을 위반한다.

 

그렇다면 제 3정규형을 만족시키기 위해선 어떻게 해야할까?

 

sol)회원번호와 주문번호를 기반으로 릴레이션을 분해한다.

회원번호 주소 이름 주문번호
주문번호 주문권수 가격

 

이렇게 주문번호와 함수적 종속성을 가진 애트리뷰트를 주문번호를 기본키로 가지는 릴레이션에 분해하여,

제3정규형을 만족시킬 수 있다.

 

 

 

2. BCNF

 -릴레이션 스키마에서 모든 의미있는 함수적 종속성 X→A를 만족할 때마다 X는 릴레이션 스키마의 슈퍼키라면, 이 릴레이션 스키마는 BCNF이다.

 

즉, 한 릴레이션에서 슈퍼키에 의해 모든 함수적 종속관계가 성립될 경우 BCNF를 만족했다 한다.

 

BCNF는 제3정규형의 간단한 형태로 제안되었으나, 나중에 제3정규형보다 더 엄격하다는 것이 밝혀졌다.

따라서, 모든 BCNF 릴레이션은 제3정규형이지만, 제3정규형이 꼭 BCNF일 수는 없다.

 

다음 릴레이션은 학생-수강정보를 나타낸 것이다.

 

 

1){학생, 과목}→'교수'

2){교수}→'과목'

으로 함수적 종속성을 나타낼 수 있는데,

 

1)의 경우 기본키(기본기 집합)와 교수가 함수적 종속관계를 지닌다.

하지만 2)의 경우 기본키가 아닌 교수과목과 함수적 종속관계를 지닌다.

 

즉, 2)의 경우 BCNF를 위반하게 된다.

 

따라서, 위의 릴레이션이 BCNF를 만족하기 위해선 다음과 같이 릴레이션을 분해할 수 있다.

학생 교수
교수 과목

 

BCNF를 만족하지 못하는 릴레이션을 분해하는 방법은 다음과 같다.

이 때, BCNF로 분해되는 릴레이션은 가짜 튜플을 생성하지 않는 비부가적 조인 조건을 만족시켜야 한다.

 

1. 릴레이션에서 BCNF를 위반하는 함수적 종속성을 찾는다.(EX. 교수→과목)

2. 릴레이션을 위반하는 함수적 종속성에 해당하는 애트뷰트들만 따로 릴레이션을 만든다(EX. R={교수, 과목})

3. 릴레이션에 남아있는 애트리뷰트와 함수적 종속성 화살표 왼쪽에 있는 애트리뷰트를 한 애트리뷰트로 한다(R={학생, 교수})

4. 이 과정을 BCNF를 만족할 때 까지 반복한다.

 


아직 BCNF는 완벽하게 이해하지 못해서 짧게 마무리했지만

이해 되는 대로 추가해서 올릴 수 있길,,ㅠㅠ

 

피드백은 언제나 환영입니다:)

 

 

반응형