티스토리 뷰

데이터베이스는 중복된 정보를 가지는 속성이 없이 정규화되어야 좋은 데이터베이스라고 할 수 있다. 정규화를 제대로 하지 않으면 아래와 같은 문제들이 발생한다.

 

  • 삽입이상 (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)

  1. 1NF (First Normal Form)
    모든 행에 값이 채워져 있어야하며, 그 값은 원자값이며, NULL이 있는 열이 있으면 안된다.

    원자값 (Atomic Value)어떤 한 속성에 대해 하나의 값만 가지고 있는 것.

  2. 2NF (Second Normal Form)
    1NF를 만족하는 릴레이션을 완전 함수 종속 관계를 유지하도록 분리한다. 부분 함수 종속인 속성이 있다면 테이블을 분리해서 완전 함수 종속을 유지하도록 한다.

  3. 3NF (Third Normal Form)
    2NF를 만족하는 릴레이션에서 이행 종속 관계를 제거한다. 도메인은 원자값이며 기본키에 대해 다른 모든값들이 완전 함수 종속 관계를 가진다.

  4. 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
링크
«   2024/05   »
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 31
글 보관함