Schema Decomposition
위 이미지는 Schema Decompositon의 예제이다
예상하시다 시피, 스키마를 분해하는데에는 엄청나게 많은 방법이 있다.
그러면 많은 방법들 중, 좋은 분해는 어떻게 해야하냐?
- Minimze Redundancy
- Avoid Information Loss (Lossless-join)
- Preserve the FDs (Dependency Preserving)
- Ensure good query performance
위 조건들을 만족 시키는게 이상적인데 더 자세하게 살펴보자
Lossless-Joins
Information Loss
위와 같이 테이블을 분해하면, 원본 테이블로 복구하는 것은 불가능하다
즉, 정보 손실이 일어난 샘이다
그래서 정보 손실이 없는 Join을 수행하려하는데
Information Loss가 없는 Join은 다음과 같다
이를 만족 시키려면
R을 R1, R2로 분해 하는데
필요충분조건이 다음과 같다
Dependency Preservation
FD를 유지한 분해는 다음과 같다
그래서 대중적인 데이터베이스 정규화 단계들이 2개 있는데
소개해보겠다
BCNF (Boyce-Codd Normal Form)
lossless, less redudany, 그러나!!!
FD들을 유지해주지는 않는다
주요 개념으로는 좋은 FD와 나쁜 FD의 정의를 다음과 같이 해준다
X -> A는 X가 (super)key이면 좋은 FD이다
즉, A가 모든 attribute들의 집합이면
아니면 나쁜 FD이다
왜??
그래서 한 relation R의 non-trivial FD들 중의 FD들이 superkey일 떄 BCNF이다
즉, 나쁜 FD가 존재하지 않는
Ex)
아니면 단순히 FD가 존재하지 않아도 BCNF이다
BCNF조건 위반하는 FD A -> B를 찾아서
R1과 R2로 분해하면된다
이 과정을 반복해 더이상 남은 FD가 없을 때 까지 계속 반복해 주면된다
Ex)
불필요한 잉여 데이터를 줄일 수 있다!
3NF (3rd Degree Normalized Form)
BCNF는 Functional Dependency들을 보존해주지는 못한다
그래서 3NF 형태가 나온건데 다음 조건들을 만족하면 3NF 형태다:
BCNF는 무조건 3NF이다 하지만 그의 역은 만족하지 않는다
3NF 형태로 분해하기 위한 알고리즘은
1. FD의 집합 F의 Minimal basis를 구한다
2. Minimal Basis의 각 FD마다, 좌측 우측의 합집합을 스키마로 가지는 릴레이셔을 생성해준다
Ex) X→A then (X,A) is the schema
3. 다 분해후, 어느 Relation도 key를 가지고 있지 않으면, key를 스키마로 가지는 relation을 하나 추가해준다
Tradeoff
BCNF: No anomalies, but may lose some FDs
3NF: Allows to keep all FDs, but may have some redundancy (anomalies)
데이터베이스 정규화
가끔은 정규화가 좋지만은 않다
조인을 하는데에 비용이 많이 들기에 아래와 같은 경우에는 불필요한 계산을 야기할 수 있다:
- the database is rarely updated after creation
- when joins are expensive
- ….
'컴퓨터공학 > 데이터베이스 DB' 카테고리의 다른 글
데이터 베이스 설계 이론 Design Theory (1) | 2024.12.31 |
---|---|
데이터 베이스 권한 Authorization (2) | 2024.12.28 |
데이터베이스 Transaction 트랜잭션 (2) | 2024.12.27 |
데이터베이스 제약조건 Integrity Constraints (3) | 2024.12.26 |
데이터베이스 뷰 View (3) | 2024.12.25 |