[Database] 11 관게형 DB 디자인 알고리즘, 함수적 종속 심화
REF: fundamentals of database systems 7th edition
- 이전까지는 top-down relational design 방식을 살펴봤다.
- 이제 bottom-up(relational design by analysis)를 봐야할 차례이다.
- bottom-up design에서 중요한 것은 Universal Schema를 Decomposition해나갈때, 특성들을 지켜야한다는 것이다.
- 각 relation의 정규형이 3NF이상이어야한다.
functional dependency preservation property
: 함수적 종속관계를 유지해야한다.lossless join property
:이미 가지고 있던 정보가 사라져서는 안되며, 없던 정보가 생겨서도 안된다.
Relation Decomposition
정의
Relation Decomposition은 Bottom-up design
이다.
Input
- universal relation R = {A1, A2, … An}
- functional dependency set F
- universal relation과 함수적 종속성 집합이 input이다.
Design Process
- universal relation R을 정규화해 여러 relation으로 분할한다.
R ==> D = {R1, R2, R3...Rm}
- 분할된 relation을 모두 union하면 원래의 모든
속성을 보존
해야한다. - 모든 relation은
3NF, BCNF
여야한다.
- universal relation R을 정규화해 여러 relation으로 분할한다.
문제점
- 무작정 universal relation을 분할해 3NF, BCNF로 분할한다고 한들, 좋은 디자인이 될 수 없다.
- 각 스키마를 tuple만 생각하면서 설계하면
spurious tuple이 생길수도 있고, tuple이 사라질수도 있다.
- 특히, pk-fk가 아닌 속성으로 join했을때 이런 문제가 발생한다.
따라서 분할된 relation을 모두 평가해야한다.
Dependency preserving condition
- 함수적 종속성을 파악하기 위한 조건을 의미한다.
- 함수적 종속성에 의해 universal schema R을 R1, R2.. Rm으로 Decomposite하게되면,
- 함수적 종속성 F의 FD는
R𝑖에 직접적으로 나타나던가,
R𝑖로부터 추론되어야한다.
- 함수적 종속성 F의 FD는
- 만약 추론됨으로서 함수적 종속성이 파악된다면, update마다 함수적 종속성을 확인해야함으로
성능상 이슈가 발생
하게된다.
D (R1, R2, ... Rm)의 Union⁺은 F⁺와 같아야만한다.
Relatioanl synthesis
-
상향식 설계시
-
R -> D = {R1, R2, … Rm}이 있을때,
- F의
minimal cover G
를 찾는다. - G의 각 함수적 종속성 X->A𝑖에 대해서 스키마 Rj(X, A1, A2,…Am)을 생성한다.
attribute preservation
을 위해남은 속성으로 Relation Rj을 정의
한다.
-> 위 알고리즘은
- minimal set G를 통해 Decomposition을 수행하므로,
3NF를 보장하며
- minimal set으로부터 나머지인 attribute를 새로운 relation을 정의해 보존하므로
dependency preserving
을 만족한다.
하지만, lossless join property 는 보장하지 못한다.
=> 따라서, lossless join propery를 테스트할 알고리즘이 필요하다
testing lossless join property
- lossless join property란
join 연산시 정보의 추가나 소실이 없다는 것을 의미
한다. *(π<R1>(r), ... , π<Rm>(r)) = r
relation R의 모든 valid state r에 대해서
- 모든 relation의 projection의 natural join이 r과 같다면 lossless join property이다.
lossless join property testing by step
- relation 갯수 * 전체 attribute 총 갯수의
matrix
생성 - matrix의 모든 값을
b로 채운다.
만약 relation이 해당 attribute를 가지고 있다면 a로 채운다.
각 함수적 종속성 X->Y에 대해
- matrix의
X 값이 a인 쌍
에 대해서 Y의 값의 둘 중 하나가 a라면
둘 다 a
로 바꾼다.
- matrix의
- 위 절차를 반복한 후
모든 값이 a인 행이 있다면 lossless join property를 만족
한다.
finding minimal set
- relational synthesis에서 minimal set을 찾는 방법에 대해서.
주어진 F를 minimal set이라고 가정하고 줄여나간다.
- 모든 FD를 하나씩 분해한다. (X->{A1, A2 ..}) => (X->{A1}, X->{A2} …)
- 각 X->A 에 대해서 G에서 이 함수적 종속성을 뺀 closure G⁺를 찾는다.
- 만약 A가 여전히 G⁺에 있다면 방금 뺀 X->A를 삭제한다.
중복되는 함수적 종속성을 삭제한다.
- 각 X->A에 대해서
- X가 만약 1개 이상의 속성을 가진다면
- X에서 B를 뺀 closure가 ∪ {(X−{B}) → A}}가 F와 같다면
- X->A를 X-B->A로 치환한다.
이 절차는 X의 LHS의 중복되는 속성을 삭제한다.
댓글남기기