티스토리 뷰
데이터베이스는 중복된 정보를 가지는 속성이 없이 정규화되어야 좋은 데이터베이스라고 할 수 있다. 정규화를 제대로 하지 않으면 아래와 같은 문제들이 발생한다.
- 삽입이상 (Insert Anomaly)
어떠한 사실을 삽입하려고 하는데 이 삽입행위가 정규화를 해치는 경우 - 삭제이상 (Delete Anomaly)
어떠한 사실을 삭제했는데 원하지않는 정보도 함께 삭제되는 경우 - 갱신이상 (Update Anomaly)
어떤 값을 수정했을 때 정보가 손실되거나 불필요한 여러 값을 추가로 수정해주어야 하는 경우
이를 방지하기 위해 정규화 과정을 거쳐야하는데 그 방법에 대해 알아보자.
함수 종속 (Functional Defendency)
정규화를 하기 전에 관계형 데이터베이스에서 발생하는 종속에 대해 알아야한다. 정규화라는 것이 결국 이 종속성을 최소화해서 효율적인 데이터베이스를 만드는 작업이기 때문이다. 어떤 속성의 집합 X의 값들이 또다른 속성 Y의 한 값에만 대응된다면 Y는 X에 대해 함수종속적이라 말하며 X -> Y 로 표현한다. 이는 여러개의 속성에 대해서도 정의될 수 있는데 그 종속성에 따라 두가지로 나뉜다.
완전 함수 종속
속성집합에 종속되는 속성이 그 부분집합에 대해서는 종속되지 않는 상태를 말한다. 예를들어 R(A, B, C)인 릴레이션에서 (A, B) -> C 만 만족해야 한다. 즉, A -> C 또는, B -> C 는 성립하지 않아야 한다.
부분 함수 종속
완전 함수 종속이 아닌 것들을 말한다. 즉, 속성집합 F에 종속되는 속성이 F의 부분집합에 대해서도 종속되는 상태이다. 예를들어 R(A, B, C)인 릴레이션에서 (A, B) -> C 도 만족하면서 A -> C 또는 B -> C 도 성립한다면 부분 함수 종속이라고 말한다.
암스트롱의 공리(Armstrong’s axioms)
함수 종속에는 수학적 명제처럼 명확한 사실들이 있다.
- 확대 (augmentation) : X -> Y 이면 XZ -> YZ 이다.
- 이행성 (Transitivity) : X -> Y 이고, Y -> Z 이면 X -> Z 이다.
위 두가지 공리가 기본 공리이며 나머지는 위 공리를 사용해서 도출할 수 있다.
- 합집합 (Union) : X -> Y 이고, X -> Z 이면 X -> YZ 이다.
이는 확대의 성질과 이행성을 이용해서 도출할 수 있는데 첫번째 명제에 확대를 적용해서 X -> XY를 도출하고 두번째 명제에 확대를 적용해서 XY -> YZ를 도출한 뒤 두 명제의 이행성을 이용해 X -> YZ를 도출해낸다. - 분해 (Decoposition) : X -> YZ 이면 X -> Y 이고, X -> Z 이다.
합집합을 역으로 생각하면 된다. - 유사이행성 (Psudotransitivity) : X -> Y 이고, YZ -> W 이면 XZ -> W 이다.
이 또한 확대를 적용해서 도출할 수 있다. 첫번째 명제에 확대를 적용해서 XZ -> YZ 로 도출한 뒤 두 명제의 이행성을 통해 XZ -> W 를 도출할 수 있다.
Closure
어떤 테이블에 있어 추론할 수 있는 모든 함수적 종속성의 집합을 뜻하며 속성에 +기호를 붙혀서 표현한다. R (A, B, C, D, E) 가 A -> C, B -> D, (A, B) -> E 와 같은 종속성을 가지고 있다고 할 때, A+ = (A, C), B+ = (B, D), (A, B)+ = (A, B, C, D, E) 라는 closure를 구할 수 있다.
Canonical Cover
존재하는 함수 종속성 중에서 암스트롱의 공리를 통해 중복되는 종속성을 없애고 최소한으로 간소화한 것을 뜻한다.
정규화 (Normalization)
-
1NF (First Normal Form)
모든 행에 값이 채워져 있어야하며, 그 값은 원자값이며, NULL이 있는 열이 있으면 안된다.원자값 (Atomic Value)어떤 한 속성에 대해 하나의 값만 가지고 있는 것.
-
2NF (Second Normal Form)
1NF를 만족하는 릴레이션을 완전 함수 종속 관계를 유지하도록 분리한다. 부분 함수 종속인 속성이 있다면 테이블을 분리해서 완전 함수 종속을 유지하도록 한다. -
3NF (Third Normal Form)
2NF를 만족하는 릴레이션에서 이행 종속 관계를 제거한다. 도메인은 원자값이며 기본키에 대해 다른 모든값들이 완전 함수 종속 관계를 가진다. -
BCNF (Boyce-Codd Normal Form)
3NF를 만족하는 릴레이션에서 삽입, 삭제, 갱신 이상이 발생하는 경우 결정권을 가진 후보키를 기준으로 릴레이션을 나누어 이상을 제거한다.
'Non-Programming > Database' 카테고리의 다른 글
데이터베이스 - 트랜젝션 (Transaction) (0) | 2019.05.23 |
---|---|
SQL - subquery (0) | 2019.05.20 |
SQL - Sequence (0) | 2019.05.07 |
SQL - Tutorial (0) | 2019.04.07 |
데이터베이스 - 연산(Operation) (0) | 2019.03.25 |
- Total
- Today
- Yesterday
- SwiftUI
- SHADER
- Cocos2d-x
- mongoDB
- C
- 데이터베이스
- 알고리즘
- ue4
- 국내여행
- C++
- Spring
- 수학
- C/C++
- 자료구조
- ios
- 드라마
- SOCKET
- game
- OS
- 운영체제
- scala
- machine learing
- winsock
- rxswift
- swift
- Git
- JSP
- DesignPattern
- Java
- database
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |