반응형
Notice
Recent Posts
Recent Comments
Link
«   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
Tags more
Archives
Today
Total
관리 메뉴

오늘부터 공부한다

데이터베이스 정규화 본문

데이터베이스

데이터베이스 정규화

1000hg 2019. 10. 15. 11:29
반응형

데이터베이스 정규화란?

 

데이터 베이스 정규화란 데이터의 중복을 줄이고, 무결성을 항상 시키는 등

여러 목적을 달성하기 위해 관계형 데이터베이스를 정규화된 형태로 재디자인하는 것을 말한다.

 

 

정규화의 목적

 

  • 불필요한 데이터를 제거, 데이터의 중복을 최소화
  • 데이터베이스 구조 확장 시 재디자인을 최소화
  • 다양한 관점에서 query를 지원하기 위해서
  • 무결성 제약조건의 시행을 간단하게 하기 위해서
  • 각종 이상 현상(Anomaly)을 방지하기 위해서, 테이블의 구성을 논리적이고 직관적으로 한다.

 

정규화의 대상

 

온라인 거래 시스템 같은 OLTP(OnLine Transaction Processing) 데이터베이스는 CRUD(Create Read Update Delete)가 많이 일어나기 때문에 정규화 되는 것이 좋지만,

 

분석 리포트 같은 OLAP(OnLine Analytical Processing) 데이터베이스는 분석과 리포팅을 위해 사용되기 때문에 연산의 속도를 위해 반정규화(denormalization)의 대상이 된다.

 

반정규화(denormalization)란, 정규화된 시스템을 성능 향상 및 개발과 운영의 단순화를 위해 역으로 정규화를 수행하는 것을 말한다. 일반적으로 join을 많이 사용해야 할 경우, 대량의 범위를 자주 처리하는 경우 등 조회에 대한 처리가 중요하다고 판단될 때 부분적으로 반정규화를 한다.

 

정규화의 과정

 

정규화는 1정규화 ~ 6 정규화까지 있지만, 실무에서는 대체로 1~3정규화 까지의 과정을 거친다.

 

 

 

 

제 1 정규화(First Normal Form, 1NF) - 중복되는 그룹 제거

테이블(Relation)이 제 1 정규형을 만족했다는 것은 아래 세 가지 조건을 만족했다는 것을 의미한다.

 

1. 어떤 Relation에 속한 모든 Domain이 원자값(atomic value)만으로 되어 있다.

2. 모든 attribute에 반복되는 그룹(repeating group)이 나타나지 않는다.

3. 기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야한다.

 

 

위의 그림은 전화번호가 여러개를 가지고 있기 때문에 atomic하지 않게 된다.

이는 1 정규형의 조건 중 1번에 위반한 것이 된다.

 

 

위의 그림은 전화번호 그룹이 반복되는 경우이다.

이는 2번 조건에 위반된 것으로, 이를 재디자인 할 필요가 있다.

아래의 그림은 제 1 정규화를 만족시키기 위해 바꾼 디자인이다.

 

 

위의 Relation ID가 더 이상 고유하게 식별할 수 있는 키가 아닌 것을 확인할 수 있다.

따라서, 3번 조건을 만족하기 위해 아래와 같이 테이블을 나누어 디자인하는 것이 좋다.

 

위의 디자인은 Custonmer Name과 Customer Telephone Number가 One-to-Many의 관계를 형성하는 것을 알 수 있다.

 

 

 

 

 

제 2정규화(Second Normal Form, 2NF) - 부분 함수 종속성 제거

 

제 2정규화를 수행 했을 경우 테이블의 모든 컬럼이 완전 함수적 조건을 만족한다.(부분 함수적 종속을 모두 제거되었다.) 이를 이해하기 위해서는 부분 함수적 종속완전 함수적 종속이라는 용어를 알아야한다.

 

 

함수적 종속 : X의 값에 따라 Y값이 결정될 때 X -> Y로 표현하는데, 이를 Y는 X에 대해 함수적 종속 이라고 한다.

예를 들어 학번을 알면 이름을 알 수 있는데, 이 경우엔 학번이 X가 되고 이름이 Y가 된다.

X를 결정자이라고 하고, Y는 종속자라고 한다.

다른 말로 X가 바뀌었을 경우 Y가 바뀌어야만 한다는 것을 의미한다.

 

함수적 종속에서 X의 값이 여러 요소일 경우, 즉 {x1, x2} -> Y일 경우, x1과 x2 모두가 Y의 값을 결정할 때 이를 완전 함수적 종속이라고 하고, x1, x2 중 하나만 Y의 값을 결정할 때 이를 부분 함수적 종속이라고 한다.

 

 

예시를 들어 살펴보자.

 

위에서 Model과 Manufacturer를 알면 Model Full Name 필드를 아예 유지하지 않거나 참조하지 않아도 결정되기 때문에 {Model, Manufacturer} -> Model Full Name이라고 할 수 있다.

 

하지만 {Model, Manufacturer} -> Manufacturer Country에서 Model과 Manufacturer Country과는 아무런 연관 관계가 없기 때문에 Manufacturer Country는 Manufacturer와만 종속관계에 있게된다.

 

이는 부분 함수 종속에 해당된다.

 

 

위에서 부분 함수 종속을 제거하게 되면, 아래와 같은 그림이 된다.

 

따라서, 부분 함수 종속을 제거한 이후 테이블은 아래와 같고, 이는 제 2 정규형을 만족한 테이블이다.

 

 

제 3정규화(Third Normal Form, 3NF) -이행 함수 족속성 제거

 

테이블(Relation)이 제 3정규형을 만족한다는 것은 아래 두 가지 조건을 만족한다.

 

1. Relation이 제 2정규화 되었다.

2. 기본키(primary key)가 아닌 속성(Attribute)들은 기본 키에만 의존해야 한다.

 

 

아래는 2번째 조건이 위반된 사례이다.

 

 

위 테이블에서 {Tournament, Year}가 후보키가 된다. 하지만 Winner Date of Birth은 기본 키가 아닌 속성인 Winner를 거쳐 {Tournament, Year}에 의존하고 있는 것을 볼 수 있다.

 

이는 3NF를 위반한 것이 된다.

 

해결책으로 테이블을 아래 둘로 나눠보자.

 

 

위 테이블은 3NF를 만족한 상태이다.

 

 

설명한 것들 이외에 BCNF, 4,5,6NF등도 있다는 것을 잊지 말자.

 

반응형

'데이터베이스' 카테고리의 다른 글

데이터베이스 BCNF란?  (0) 2019.11.08
데이터베이스 이상 현상(Anomaly)  (0) 2019.10.15
무결성 제약조건  (0) 2019.10.11
트랜잭션(Transaction) 내용 추가 및 기타  (0) 2019.10.08
데이터베이스 모델링  (0) 2019.10.08