본문 바로가기

공부하자/IT

[DB] 데이터 종속성과 정규화

728x90
반응형

데이터 종속성과 정규화


데이터의 논리적 표현

 

데이터베이스 설계에서 중요한 사항은 무엇보다도 현실 세계를 가장 정확하게 표현할 수 있는 데이터의 논리적 구조를 결정하는 것이다특히 관계 데이터베이스에서는 데이터 값들을 테이블 형태의 릴레이션으로 표현하므로 현실 세계를 정확하게 표현하기 위해서 어떤 릴레이션들이 필요하고, 각 릴레이션은 어떤 애트리뷰트들로 구성해야 하는가를 결정하는 문제가 중요하다. 이것이 곧 관계 스킴(relation scheme)의 설계이다.

관계 스킴을 설계하기 위해서는 먼저 필요한 애트리뷰트, 엔티티, 관계성들을 식별하여 수집하고 이러한 요소들을 릴레이션으로 만드는 것이다.

 

고려사항

- 애트리뷰트들 사이에 존재하는 관계성(relationship), 즉 데이터 종속성(data dependancy)

효율적인 데이터 처리

- 데이터의 일관성 유지

 

 

 

 



삭제이상

- 학번이 200인 학생이 과목 C123의 등록을 취소해서 삭제를 해야 한다고 하면, 과목번호는 기본키이기 때문에 과목번호만 삭제하지 못하고 튜플 전체를 삭제해야한다. 그러면 3학년이라는 정보와 성적까지 함께 삭제 될 수 밖에 없다. 결국 삭제를 원하는 정보 뿐만 아니라 삭제를 원하지 않는 정보도 같이 삭제해야 하는데, 이러한 현상을 연쇄 삭제(triffered deletion) 현상이 일어나게 되어 정보손실을 가져오는데, 이러한 현상을 삭제 이상이라고 한다.

- 학생 600을 추가하면서 학년이 2 라는 정보만 삽입을 하고 싶은데, 기본키가 학번과 과목번호이기 때문에 과목번호를 함께 삽입하지 않고서는 삽입을 할 수가 없다.

원하지 않는 정보까지 삽입해야 하기 때문에 이러한 현상을 삽입 이상이라고 한다.


갱신이상

- 학번이 400인 학생의 학년을 4에서 3으로 변경시킨다면, 학번이 400인 튜플 모두를 변경해야 한다. 하나의 튜플만 변경시킨다면 데이터의 일관성을 가질 수가 없다.

일부 튜플의 애트리뷰트 값만 갱신함으로써 데이터의 모순성(inconsistency)이 생기는 현상을 갱신이상이라고 한다.

 

* 이러한 문제들의 해결은 애트리뷰트들 간의 종속성(dependency)을 분해해서 하나의 릴레이션에는 기본적으로 하나의 종속성을 표현되도록 분해해서 해결할 수 있다. 이런 분해(decomposition) 과정을 정규화(normalization)라고 한다. 이 과정에서 일단 만들어진 릴레이션들도 보다 바람직한 형태의 릴레이션들로 변환할 수 있는데, 이것을 스키마 변환(schema transformation)이라 한다.

 

스키마 변환의 3가지 원리

- 정보의 무손실 표현 (nonloss representation of informaion)

- 최소의 데이터 중복성 (minimal data redundancy)

- 분리의 원칙 (principle of separation)





함수 종속

 

함수 종속(FD : Functional Dependency) 

- 어떤 릴레이션 R에서 X Y를 각각 R의 애트리뷰트 집합의 부분 집합이라고 하자.

애트리뷰트 X의 값 각각에 대해 시간에 관계없이 항상 애트리뷰트 Y의 값이 오직 하나만 연관되어 있을 때 Y X에 함수 종속이라 하고 X -> Y 로 표기한다.

 

X : 결정자

Y : 종속자 

 

ex) 학생 릴레이션에 속해 있는 애트리뷰트, 즉 이름, 학년, 학과는 애트리뷰트 학번에 각각 함수 종속이다. 어떤 학번이 정해지면 그 학번에 대응하는 이름이나 학년, 학과의 값은 오직 하나만 있기 때문이다.

 

학번 -> 이름

학번 -> 학년

학번 -> 학과

 

줄여서

 

학번 -> (이름, 학년, 학과)

 

* X가 어떤 릴레이션 R의 후보 키, 특히 기본키라면 릴레이션 R의 모든 애트리뷰트 Y는 반드시 X에 함수 종속이어야 한다. 그러나, 애트리뷰트 X가 반드시 R의 후보키가 되어야 하는 것은 아니다

 

결정자(determinant), 종속자(dependent)

 - R의 두 투플에서 애트리뷰트 X의 값이 같으면 이들에 연관된 애트리뷰트 Y의 값도 반드시 같아야 함.

따라서, R에서 애트리뷰트 Y가 애트리뷰트 X에 함수 종속이라는 의미는

애트리뷰트 X가 애트리뷰트 Y의 값을 함수적으로 결정한다는 의미와 동등

: X->Y의 관계를 성립시키는 X를 결정자, Y를 종속자라고도 함

 

ex) 수강릴레이션에서 학번이 같은 모든 수강 투플들은 반드시 학년(year) 애트리뷰트 값이 같아야 함.

학번은 결정자,

학년은 종속자

 

아래와 같은 당연 함수 종속은 일반적으로 제외 제외

학번->학번

{학번, 이름} -> 이름

 

함수종속 다이어그램(FD Diagram)

- 복잡한 함수 종속 관계를 쉽게 이해하기 위해 도식으로 표현한 것



DFD에서 도출가능한 종속

 

{학번, 과목번호} -> 성적,

학번 -> 학년

 

완전함수종속
-
릴레이션 R의 어떤 애트리뷰트 Y가 다른 복합 애트리뷰트 X에 함수종속이면서, X의 어떤 진부분 집합에도 함수 종속이 아닐 때

 Y X에 완전 함수 종속이라고 함

 

완전함수종속  (성적은 {학번, 과목번호}에 완전함수종속)

부분함수종속  (학년은 {학번, 과목번호}에 부분함수종속)

진부분집합 : 자기자신 A=B를 제외한 부분 집합

 

추론 규칙(inference rule)

R1:(반사 규칙) A ⊇ B이면 A->B이다. 또한 A->A이다.

R2:(첨가 규칙) A->B이면 AC->BC이고 AC->B이다.

R3:(이행 규칙) A->B이고 B->C이면 A->C이다

R4:(분해 규칙) A->BC이면 A->B이다.

R5:(결합 규칙) A->B이고 A->C이면 A->BC이다.

 




정규화 제1정규형(1NF)

1정규형(1NF ; First Normal Form)

    - 릴레이션 R의 모든 도메인이 원자값만을 포함

   - 문제) 기본키에 부분함수종속으로 인한 이상현상 발생         

수강지도(학번, 지도교수, 학과, 과목번호, 성적

기본키 : {학번, 과목번호

 

{학번, 과목번호} -> 성적

                 학번 -> 지도교수

       학번 -> 학과

       지도교수 -> 학과




이 다이어그램이 나타내는 함수 종속의 의미는 학번과 과목번호의 조합으로 학생이 등록한 과목의 성적을 식별할 수 있으며, 한 학생은 한 지도교수를 가질 수 있고, 한 학과에만 속한다. 또 각 지도교수는 어느 한 학과에만 속한다.


     수강지도

 

 


이 릴레이션은 지도교수와 학과 애트리뷰트 값들에 불필요하게 많은 데이터의 중복을 포함하고 있어, 문제를 야기하고 있다.


 삽입이상

- 어느 특정 학생이 어떤 교과목을 등록할 때까지는 그 학생의 지도교수가 누구라는 사실을 삽입할 수 없다. 학번이 500인 학생의 지도교수가 '라라라'라는 사실을 삽입할 수 없다. 왜냐면 학번이 500인 학생이 어떤 교과목을 등록하지 않으면 기본키가 NULL이 되는데, 이와 같은 상황은 개체 무결성 제약에 의해 허용되지 않기 때문이다.

 

삭제 이상

- 만일 학번이 200인 학생이 교과목 C123만을 등록하여 튜플이 하나만 있는 상황에서 교과목 C123의 등록을 취소하면, 이 튜풀은 삭제하게 된다. 이렇게 되면 이 학생의 지도교수가 '나나나'라는 정보까지도 잃어버리게 된다. 문제는 이 정보를 삭제하려고 한 것이 아니라는 것이다.

 

갱신이상

- 수강지도 릴레이션에서는 어떤 학생에 대한 지도교수 애트리뷰트 값이 여러 번 중복되게 되는데, 이것은 바로 갱신 문제의 원인이 된다.  , 학번이 400인 학생의 지도교수가 '가가가'에서 '다다다'로 변경 되었다면, 학번 400이 나타난 모든 튜플을 찾아 거기에 해당하는 지도교수 데이터 값을 '다다다'로 변경해 주어야 한다. 그렇지 않을 경우, 즉 일부만 변경되면 학번 400인 학생의 지도교수가 '가가가', '다다다' 둘이 되어 데이터의 일관성이 없게 된다.





정규화 제2정규형(2NF)

 

- 어떤 릴레이션 R 1NF이고 기본키에 속하지 않은 애트리뷰트 모두가 기본키에 완전 함수 종속이면2정규형에 속한다.



 

 




- 하나의 릴레이션을 아무런 정보 손실 없이 동등한 릴레이션들로 분해하는 것을 무손실 분해(nonloss decomposition)라고 한다.

 

- 일반적으로 세 개의 애트리뷰트  A, B, C를 가지고 있는 릴레이션 R(A, B, C)에서 함수 종속 A -> B가 성립하면, 언제든지 프로젝션을 통해 R1(A, B)R2(A, C)로 무손실 분해 할 수 있다.

 

, 이 분해 과정에서 어떤 정보도 잃어 버리지 않기 때문에 원래의 릴레이션에서얻을 수 있는 정보는 새로 분해된 릴레이션들로부터도 얻을 수 있다.

 

그러나 이 역은 일반적으로 성립하지 않는다.

왜냐하면 새로 만들어진 릴레이션들은 원래의 릴레이션에서 표현할 수 없는 정보를 포함 할 수 있기 때문이다.

 

일반적으로 함수 종속 관계 A -> B  B -> C가 성립되면 논리적 결과로 A -> C가 성립한다. 이때 애트리뷰트 C A에 이행적 함수 종속(transitive FD)라고 한다. 바로, 이 이행적 함수 종속은 데이터 변경 이상의 원인이 된다.

 





정규화 제 3정규형(3NF)

 

어떤 릴레이션 R 2NF이고 기본키에 속하지 않은모든 애트리뷰트들이 기본키에 이행적 함수 종속이 아닐 때, 3정규형에 속한다.

 

약점

복수의 후보키를 가지고 있고, 후보키들이 복합 애트리뷰트로 구성되고, 후보키들이 서로 중첩되어 있는 경우 적용할 수 없다.


 

 



일반적으로 함수 종속 관계 A -> B B -> C가 성립되면 논리적 결과로 A -> C가 성립한다. 이때 애트리뷰트 C A에 이행적 함수 종속(transitive FD)라고 한다. 분해는 {A, B}, {B, C}로 하는 것이 올바른 분해 방법이다.





정규화 BCNF

 

릴레이션 R의 모든 결정자가 후보키이면 릴레이션 R은 보이스/코드 정규형(BCNF)에 속한다.

BCNF에 속하는 릴레이션은 모두 제3정규형에 속한다. 그러나 제3정규형에 속하는 릴레이션이 모두 BCNF에 속하지는 않는다. BCNF는 제3정규형보다 강력하다고 볼 수 있고, BCNF "강한 제3정규형"이라고도 한다. 1NF, 2NF, 기본키, 이행종속 등의 개념을 이용하지 않고 정의되기 때문에 3NF보다 간단하다. 복합속성을 허용한다.



 

 



기본키 : 학번, 과목번호

이 수강과목 릴려이션은 당연히 1NF이며 기본키{학번, 과목번호}에 속하지 않으면서 키에 완전 종속이 아닌 애트리뷰트도 없고, 이행 종속이 없으므로 2NF 이면서 3NF이다. 그러나 BCNF는 아니다.

 

삽입이상

교수 P5가 자료구조를 담당하게 되었을 때 교수와 과목번호 많을 삽입할 수가 없다. 기본키인 학번이 없기 때문이다.

 

삭제이상 

 학번이 100인 학생이 C101 과목을 취소하여 튜플이 삭제되면, 교수의 정보마져 사라져 버리게 된다.

 

갱신이상

교수 P1의 담당과목이 C101에서 D201로 변경 되었다면, 이 릴레이션에서 P1이 나타나 있는 모든 튜플에 대해 변경해 주어야 한다. 하나만 변경해준다면 P1은 두가지 과목을 담당한것이 된다.

 변경이상의 원인은 사실상 교수 애트리뷰트가 결정자이지만 후보키로 취급되고 있지 않다는데 있다. 따라서 다음과 같이 분해해야 한다.

 

수강교수(학번, 교수)

           기본키 : {학번, 교수}

 외래키 : {교수}, 참조 : 과목교수

 

과목교수(교수, 과목)

기본키 : 교수




 

 




정규화 5NF

 

릴레이션 R에 존재하는 모든 조인종속(RD)이 릴레이션 R의 후보키를 통해서만 성립된다면

릴레이션 R은 제5정규형(5NF : Fifth Normal Form) 또는 PJ/NF(Projection-Join Normal Form)

속한다





정규화들의 관계







반응형