Day40 - 정규화

2021. 4. 12. 17:39Oracle 공부

이번에는 정규화에 대해서 알아볼 건데요.

 

정규화

정규화는, 테이블을 나누는 것을 의미 합니다.

 

테이블이 이렇게 만들어 져 있을 경우에, 여러가지 문제가 있습니다.

1. 카테고리가 여러개의 값을 가짐.

2. 중복된 값을 가짐.

 

등등...

 

정규화는 1부터 5까지 있는데요 실제로는 3정규화 또는 BCNF 까지만 정규화를 진행한다고 합니다.

 

제 1정규화 -> 데이터를 원자값으로 만들기.

원자값이란 하나의 값을 의미 합니다. ( 카테고리는 다중값을 가지고 있죠? )

 

분리해서 아래와 같이 만들어 주면 됩니다. ( 카테고리 속성 분해 )

※ 분리할 경우 N : M 관계가 되기 때문에 맵핑테이블을 만들어 주어야 함.

제 2정규화 -> 부분함수 종속성 제거

1정규화를 진행하고 나온 테이블 중에서 title 이 있는 테이블을 보면,

title 부터 regdate 까지 따로

type 부터 address 따로 부분적으로 title에 종속되어 있음을 알 수 있습니다.

 

그래서 아래와 같이 테이블을 분리 시켜주어야 합니다.

제 3정규화 -> 이행함수 종속성 제거 ( 기본키가 아닌 속성은 기본키에만 의존 해야 한다 )

2정규화를 진행하고 나온 테이블 중에서 상품 테이블을 보면,

상품번호가 PK(기본키) 인데, user_id 부터 user_address 까지는 user_id가 변경이 되면, 그 뒤에 있는 속성은 변경이 됩니다.

즉. 기본키가 2개 처럼 보입니다.

 

그래서 아래와 같이 분리시켜 주어야 합니다.

 

 

※ 여기까지 정규화를 진행했을 때, 나온 테이블을 보면, 총 5개가 됩니다. ※

이렇게 정규화가 된 테이블을 보면, 중복된 행도 없고, 다중값을 가진 행 등등의 문제가 보이지 않습니다.

테이블은 이런 식으로 정규화를 해서 만들어 주어야 합니다.

 

이 뒤로 BCNF , 제 4정규화 , 제 5정규화 가 있는데, 개념만 알고 있으면 된다고 합니다.

 

BCNF -> 결정자들 중에서 후보키가 아닌 속성 제거

제 4정규화 -> 다치 종속 제거

제 5정규화 -> 조인 종속성 제거

 

오늘은 이렇게 정규화에 대해서 간단하게 알아 보았습니다.

 

고생하셨습니다.

'Oracle 공부' 카테고리의 다른 글

Day 42 - hr 계정 초기화  (0) 2021.04.14
Day41 - 물리적 데이터 모델링  (0) 2021.04.13
Day40 - 논리적 데이터 모델링  (0) 2021.04.12
Day39 - 개념적 데이터 모델링  (0) 2021.04.12
Day39 - 데이터 모델링  (0) 2021.04.12