공부중 .../데이터처리와활용

관계형 데이터베이스 설계하기

Chelsey 2022. 12. 11. 00:21
728x90

데이터를 전처리할 때 데이터 값들을 다듬는 전처리과정으로 정규화를 사용했었는데 데이터를 설계할 때도 정규화가 필요하다보다. 

정규화가 필요할 때

  • 삭제이상
    전체 중 하나의 테이블에만 학생의 이름이 저장되어 있을 때
  • 삽입이상
    전체 속성 중 일부분의 정보만 채워서 삽입하려는 경우
  • 갱신이상
    특정 한 학생의 이름 값만 바꾸려하는데 같은 이름의 값이 여러개 존재할 때 -> 정규화가 필요하다

함수적 종속성

함수 관계가 되지 않는 경우 : 한 사람이 두 행의 값을 가질 때 , 예를 들어 같은 값이 두 번, 세 번 중복되어 적히는 것
테이블 T에서 X 값 각각에 대응되는 Y값은 하나만 가진다.

정규화란? 테이블을 설계할 때는 기본키를 중심으로, 연관성이 높은 애트리뷰트들만을 모아 테이블을 구성하는 기법이다.

기본키란? 어떤 튜플을 유일하게 지정할 수 있는 attribute. 


정규형

제3 정규형 (3NF) 
- 기본키에 속하지 않는 attribute
- attribute 모두가 함수적 종속
- attribute 모두가 전이적 함수 종속 관계가 아닌 경우

학번과 이름, 교수번호, 소속학과와 관계가 있는데 ,  
그 와중에 교수번호 - 소속학과가 관계 있으면 3NF에 해당되지 않음
이 상황에서 전이적 함수 종속관계 : 학번 -> 교수번호 , 교수번호 -> 소속학과 , 학번 -> 소속학과

 

 

보이스-코드 정규형 BCNF 로 데이터를 나눌 수 있다면 성공적인 데이터 베이스 설계를 했다고 볼 수 있다.
BCNF가 성립하기 위해서는 아래 두가지 조건이 있다.
1. T.X -> T.Y 형태로 볼 수 있는데 아래 그림에서는 교과목 번호 -> 교과목명 , 개설학과 로 형태가 구성됨을 확인할 수 있다. 
- T.X 라는 용어는 Table X값의 줄임말인듯 하다. T.X를 우선 X값이라고 생각하고 T.Y를 Y값이라고 생각하면 편하다. 
2. Table에 있는 모든 Attribute들이 서로 어떠한 함수적 종속성이 없어도 BCNF가 성립한다고 한다.

아래 두가지 예시를 보자.
이것은 BCNF가 성립되는 경우이다.

  • 교과목 테이블에서 교과목번호가 교과목명, 개설학과를 함수적으로 결정한다. 교과목번호는 후보키다.
  • 교수 테이블에서 교수번호가 이름과 소속학과를 함수적으로 결정한다. 교수번호는 후보키다

 

이것은 BCNF 가 아닌 경우이다.

  • 왼쪽 테이블과 오른쪽의 Attribute가 이어져 있는 것은 괜찮으나, 
    교수번호에서 교과목번호로 가는 관계를 살펴보면, 교수번호가 T.X로 교과목번호가 T.Y 형태로 봐지게 되는데
    교수번호 T.X가 후보키가 아니다(교과목번호만 함수로 결정하기 때문)

무손실 분해 Lossless decomposition

테이블을 분해를 할 때는 무손실 분해가 되어야 한다. 정규화 과정에서 꼭 필요한 무손실 분해
- 테이블 T가 하나 이상의 공통 Attribute를 가지면서 두 개 이상의 테이블로 분해될 때 다음의 조건을 만족하면 무손실 분해이다.

조건 : T = T1 join T2 join ... join Tn , 분해한 테이블을 모두 join했을 때 원래와 같다.

유손실 분해의 예시

학번 교수번호
1234 4567
1234 5464
학번 교과목번호 강의시간 강의실
1234 21 3 202

위 두 테이블을 합쳤을 때 

학번 교수번호 교과목번호 강의시간 강의실
1234 4567 21 3 202
1234 5678 14 5 101

같은 학번이 중복으로 적히게 되는 것. 학번이 같은 값이 두 번 적혀있으므로 -> 학번은 기본키가 아니다.
기본키를 기준으로 테이블을 합치게 되는데, 중복된 값이 기본키에 있다면 1번 테이블 2개의 행과 2번 테이블 1개의 행과 합쳐야하는데 이 때 문제가 생기게 된다. 
학번이 기본키로 되어도 교수번호를 함수적으로 구분짓지 못하므로 학번은 기본키가 아니다. 유일성을 보장해주지 못하므로.

무손실 분해의 예시

교과목번호 교수번호
1234 4567
학번 교수번호 강의시간 강의실
1234 21 3 202
학번 교수번호 교과목번호 강의시간 강의실
1234 4567 21 3 202
1234 5678 14 5 101

교수번호가 정해지면 교과목번호가 정해진다 ,
교수번호 값이 중복되어 기록되지 않는다. -> 교수번호가 기본키

중복된 Attribute가 두 테이블 중 하나에서 후보키이면 무손실 분해가 성립된다.


종속성 유지 분해

잘못된 데이터가 들어오지 않도록 체크해야한다. 무손실 분해 후 테이블에 존재하는 FD 들의 각 집합이 종속성 유지 분해가 된다고 하면 분해된 테이블에서만 체크가 가능하다.

무손실 분해 후 데이터를 다시 합쳐서 검증하기에는 비용이 많이 든다는 단점을 보완한다.

일방적으로 분해된 FD들의 합은 원본과 같지 않다. 하지만 원본과 같고 그래서 복원이 가능하다면 종속성 유지 분해가 가능하다고 본다.

 

728x90