[Database]Well structured relation, Normalization... 정리

shane·2021년 2월 9일
0

Well structured relation

최소한의 데이터 중복을 가지고, 유저들이 anomaly를 발생시키지 않고 insert(삽입), delete(삭제), modify(수정)을 할 수 있게 해주는 relation을 의미한다.

목적

Anomaly를 피하는 것이 가장 큰 목적이다. Anomaly에는 아래의 3가지가 존재한다.

  • Insertion Anomaly : 새로운 row를 추가하는 것이 유저로 하여금 중복 데이터를 만들게 하는 현상을 의미한다.
  • Deletion Anomaly : Row를 삭제하는 것이 미래에 필요한 row의 데이터 손실을 일으키는 현상을 말한다.
  • Modification Anomaly : Row를 변경하는 것이 중복으로 인해, 다른 row들을 변경하게 되는 현상을 말한다.

최고의 방법은 하나의 테이블이 둘 이상의 entity type의 형태로 존재하면 안되게 해야하는 것이다.


Normalization(정규화)

데이터베이스 이론 중에서 중요한 개념 중 하나인 normalization이다. 위에서 언급한 3가지 anomaly를 피하기 위해서는 well structured relation이 필요하게 되는데 이를 위해 하는 작업이 normalization이다. 또한, logical database design을 평가하거나 향상시키기 위한 도구로 사용된다.

보다 작고 잘 구성된 relation(well structured relation)들을 생성하기 위해, anomaly를 가지고 있는 relation을 분해하는 과정을 Normalization이라고 한다.

목적

Normalization의 주된 목적은 다음과 같다.

  • 데이터 중복의 최소화.
  • 간편한 Referential Integrity의 강제화.
  • 데이터를 더 쉽게 유지.

Fucntional Dependency(함수 종속성)

함수와 같이 어떤 값을 통해 종속된 관계에 있는 다른 값을 유일하게 결정할 수 있다는 것을 의미한다.

한 relation에 하나 혹은 그 이상의 attribute로 이루어진 집합인 X와 Y가 있다고 하자. 그리고 X와 Y 사이에는 교집합이 존재하지 않는다고 하자.
X에 포함되는 각각의 값들에 대해 Y로에 unique한 값들이 존재하는 것을 funtional dependency라고 한다. 이 경우 X가 Y를 결정한다고 하며, X→Y로 표현한다.
또한, X→Y 형태의 functional dependency에서 X에 포함되는 attribute들의 집합은 X→Y 형태의 functional dependency의 determinant라고 부른다.

예를 들어, 한 relation에 age와 birthday를 attribute로 갖는다고 해보자. age는 birthday에 종속되어 있다고 볼 수 있으며, 이 경우 age는 birthday를 통해 age를 알아낼 수 있기에, age가 없더라도 결정이 가능한 attribute이다.

Well structured relation을 만들 때 functional dependency를 찾으면, 중복되는 데이터를 없앨 수 있다. 그렇기에 Normalization을 하는 단계에서 functional dependency를 찾는 것은 매우 중요한 일이다.

또한, Functional dependency는 다음과 같이 2가지로 나눌 수 있다.(X→Y)

  • Full funcational dependency : X에서 일부 attribute를 제거할 경우, functional dependency가 유지되지 않는 경우를 의미한다.
  • Partial functional dependency : X에서 일부 attribute를 제거를 하더라도, functional dependency가 유지되는 경우를 의미한다.

Normal Form

어떤 특정한 규칙의 적용으로 나오게 되는 relaion의 상태(state)를 말한다. 혹은 Normalization의 과정은 보통 단계별로 진행되는데, 각각의 단계에 대응하는 것을 의미하기도 한다.

Normalization의 과정에서, relation은 다음의 상태에 놓여있을 것이다. 또한, 이러한 모든 normal form들은 relation의 attribute들의 functional dependency를 기반으로 하고 있다.

  • First normal form(1NF)
  • Second normal form(2NF)
  • Third normal form(3NF)

일반적으로 well structured relation은 3NF까지 된 경우를 의미하며, 그 이상의 더 높은 단계도 존재하게 된다.

  • Fourth normal form
  • Fifth normal form

이러한 normal form들은 매우 드물게 상황에 따라 적용하기도 한다.

1NF

하나의 relation 내의 모든 attribute는 mulitivalued가 아니며, composite이 아니여야 한다.
모든 relation들은 1NF의 상태에 있다. Relation의 속성 중 하나가 mulitivalued가 아니며, composite이 아닌 것이기 때문이다.

  • 여러 개의 value를 가지고 있는 경우, 각각의 row로 쪼개준다.
  • Composite의 경우 attribute들을 쪼개준다.

2NF

Relation이 2NF이기 위해서는 1NF여야 하며, 모든 primary key가 아닌 attribute들은 primary key에 full functional dependent여야 한다.
2NF의 주된 목적은 Partial functional dependency들을 없애는 것이다. 혹은, primary key가 아닌 attribute들은 primary key의 일부에 의존하고 있어야 한다.

  • Full functional depend 중인 attribute와 primary key끼리 새로운 relation을 만든다.
  • 모든 primary key가 아닌 attribute들은 새로운 relation에서 full functional dependent여야 한다.

3NF

3NF도 2NF와 같이 2NF여야 한다.
Transitive Functional Dependency를 제거하는 것이 주된 목표이다.
예를 들어, A→B이며 B→C이고 A→C인 상황을 transitive functional dependency라고 한다. 이러한 경우, C는 A에 대해 transitively dependent 중이라고 한다.

예를 들어, Course(CourseNo, RoomNo, Capacity)라는 relation이 존재하며, CourseNo→RoomNo, RoomNo→Capacity, CourseNo→Capacity인 functional dependency를 갖는다고 하자.

위의 예시의 경우, Primary key에 직접적으로 의존하고 있는 RoomNo와 RoomNo, CourseNo에 동시에 의존 중인 Capacity 둘을 가지고 따로 relation을 만든다. 이 경우 Capacity는 RoomNo에 의존 중이기 때문에 새로운 relation은 RoomNo을 primary key로 하고 있어야 한다. 3NF 진행 후 relation은 다음과 같아진다.

  • Course(CourseNo, RoomNo)
  • CourseRoom(RoomNo, Capacity)

3NF까지만 해도 Well structured relation이기 때문에, 여기서는 3NF까지만 다루도록 한다. 필요한 경우에는 4NF와 5NF는 하단의 참고 링크를 통해 공부해보자.
또한, 예시가 부실한 기분이 들어 나중에 시간이 나면 예시를 포함해보도록 하겠다.


https://en.wikipedia.org/wiki/Fourth_normal_form
https://en.wikipedia.org/wiki/Fifth_normal_form

profile
개발 관련 소통을 좋아하는 백엔드 개발자입니다.

0개의 댓글