다른 명령
새 문서: 상위 문서: Relational Database Design ==개요== 헤당 문서에서는 관계형 데이터베이스를 설계할 때 사용되는 여러 가지 서로 다른 정규형(normal form)들 중에서 가장 일반적으로 사용되는 두 가지를 다룬다. ==Boyce–Codd Normal Form== '''Boyce–Codd Normal Form(BCNF)는 함수 종속성에 기반하여 발견할 수 있는 모든 중복(redundancy)을 제거'''한다. 릴레이션 스키마(relation scema) R이, 함수... |
|||
| 32번째 줄: | 32번째 줄: | ||
===BCNF and Dependency Preservation=== | ===BCNF and Dependency Preservation=== | ||
==각주== | ==각주== | ||
[[분류:데이터베이스 시스템]] | [[분류:데이터베이스 시스템]] | ||
2025년 4월 29일 (화) 00:05 판
상위 문서: Relational Database Design
개요
헤당 문서에서는 관계형 데이터베이스를 설계할 때 사용되는 여러 가지 서로 다른 정규형(normal form)들 중에서 가장 일반적으로 사용되는 두 가지를 다룬다.
Boyce–Codd Normal Form
Boyce–Codd Normal Form(BCNF)는 함수 종속성에 기반하여 발견할 수 있는 모든 중복(redundancy)을 제거한다. 릴레이션 스키마(relation scema) R이, 함수 종속성(function dependency) 집합 F에 대해, 다음 조건을 만족하면 R은 BCNF에 있다고 한다:
α → β가 자명한 함수 종속성(trivial functional dependency)이어야 한다.[1]- α가 R 스키마에 대한 슈퍼키(superkey)이어야 한다.
또한, 데이터베이스 설계 전체가 BCNF에 있다(in)고 하려면, 그 설계를 구성하는 모든 릴레이션 스키마 각각이 BCNF에 있어야 한다.
예를 들어, 아래와 같은 릴레이션 스키마를 고려하자:
in_dep (ID, name, salary, dept_name, building, budget)
해당 릴레이션에서는 dept_name → building, budget 이라는 함수 종속성이 성립하지만 dept_name은 슈퍼키가 아니다.[2] 즉, 해당 릴레이션은 BCNF에 있지 않다(not in). 따라서 해당 릴레이션은 in_dep를 instructor와 department로 분해하는 것이 더 나은 설계이다. 그 이유는 아래와 같다:
- Instructor 스키마는 BCNF에 있다.
- instructor에서의 모든 비자명(nontrivial) 함수 종속성:
ID → name, dept_name, salary - 이때 튜플의 모든 속성값은 ID 속성의 값을 통해 추적할 수 있으므로, ID는 슈퍼키이다.
- instructor에서의 모든 비자명(nontrivial) 함수 종속성:
- Department 스키마도 BCNF에 있다.
- department 스키마에서의 비자명 함수 종속성:
dept_name → building, budget - 마찬가지로 dept_name은 슈퍼키이고, 따라서 department 역시 BCNF에 있다.
- department 스키마에서의 비자명 함수 종속성:
Decomposing a Schema into BCNF
BCNF에 있지 않은 스키마를 분해하기 위해서는 아래의 일반 규칙을 따라야 한다.
스키마 R이 BCNF에 있지 않으면, 반드시 하나 이상의 비자명 함수 종속성 α → β가 존재하며, 이때 α는 R의 슈퍼키가 아니다.
이 경우, R을 두 개의 스키마 R1, R2로 대체(replace)한다:
R1 = (α ∪ β)
R2 = (R − (β − α))
이를 위의 in_dep 릴레이션을 분해하는데 적용하면 α = dept_name, β = {building, budget}이다. 따라서 아래와 같다:
(α ∪ β) = (dept_name, building, budget) (R − (β − α)) = (ID, name, dept_name, salary)
이때 스키마를 한번 분해했더라도, 새로 생긴 스키마 중 하나 이상이 여전히 BCNF에 있지 않을 수 있으며, 그런 경우에는 분해를 반복해야 한다.