오라클

정규화(Normalization)

웹개발자준비 2018. 9. 6. 19:14

정규화, Normalization


- 자료의 손실이나 불필요한 정보를 없애고, 데이터의 일관성을 유지하고, 데이터 중복을 최소화하기 위해

 자료 구조(테이블 스키마)를 변경하는 작업

 - 우리가 만든 테이블(비정형) -> 정규형의 테이블로 수정하는 작업

 - 제 1 정규화, 제 2 정규화, 제 3 정규화..

 

 관계형 데이터베이스 시스템이 지향하는 데이터베이스의 상태

 1. 최대한 null을 가지지 않는다.

 2. 중복값을 가지지 않는다.(완전히 동일한 데이터가 2군데 이상 존재하지 않는다.)


 정규화를 하는 목적

 1. null + 중복값을 제거

 2. 자료 삽입, 갱신, 삭제에 따른 이상 현상 제거

 

 이상 현상(Anomaly)

 - 테이블 설계가 잘못되면 발생 > 현상을 발생 안하도록 테이블을 다시 설계 > 정규화

 

 1. 삽입 이상(Insertion Anomaly)

 - 특정 테이블 데이터 삽입할 때 원하지 않는 데이터까지도 같이 넣어야 하는 상황

 

 2. 삭제 이상(Deletion Anomaly)

 - 특정 테이블 데이터 삭제할 때 원하지 않는 데이터까지 같이 삭제되는 상황

 

 3. 갱신 이상(Update Anomaly)

 - 동일한 데이터가 2개 이상의 테이블에 동시에 존재 > 그 중 1개의 데이터를 수정했지만 다른 테이블 수정하지 못했을 경우

 > 두 데이터의 상태가 서로 달라지는 상황

 

 함수 종속(Functional Dependency)

 - 테이블내에서 2개 이상의 속성끼리의 관계 제약 

- 정규화는 '부분 함수 종속'이나 '이행 함수 종속'을 모두 없애고, 모든 컬럼을 '완전 함수 종속'으로 만드는 작업이다.


1. 완전 함수 종속, Full Functional Dependency

2. 부분 함수 종속, Partial Functional Dependency

3. 이행 함수 종속, Transitive Functional Dependency


 정규화 종류

 - 1NF ~ 3NF(Normal Form)

 - 비정규형 -> (정규화) -> 정규형


정규화 결과

-1개 테이블 -> 2개 이상의 테이블


제 1정규화 ,1NF

- 제 1정규화를 만족하는 정규형의 규칙

- 모든 컬럼(속성)은 원자값을 가진다.

- 여러개의 값들을 하나의 컬럼에 넣으면 안된다.

- 1개의 셀 안에 2개 이상의 복합 데이터가 보이면..

    -> 새롭게 컬럼을 나눠서 단일값 컬럼으로 분리한다.(1개 컬럼 = 1개 데이터********************)

    **** 가로로 컬럼을 늘리면 -> null발생

    **** 세로로 행을 늘리면 -> 중복값 발생

    -> 테이블 분리한다.(*** 정답)

- 분리되어 떠렁져 나가는 테이블은 기본키를 정할 수 있는 상태가 된다.

    


제 2정규화, 2NF

- 키가 아닌 모든 컬러럼은 키 전체에 완전 함수 종속이어야 한다.

- 부분 함수 종속을 발견해서 제거한다.(*****)

- 복합키를 가지는 테이블에서 발생한다.(PK가 1개인 테이블에서는 발생 안함)


제 3정규화,3NF

- 기본키가 아닌컬럼에 의존하는 컬럼이 존재하면 안된다.

- 이행 함수 종속을 반결해서 제거한다.(*****)

- A -> B -> C(****)


제 1 정규화

- 하나의 컬럼에 2개 이상의 값이 있으면 안된다.


제 2 정규화

- 복합키 존재 시 복합키 중 일부 컬럼에만 종속적인 컬럼이 있으면 안된다.

- 부분 함수 종속 제거


제 3 정규화

- 기본키가 아닌 다른 키에 종속적인 컬럼이 있으면 안된다.

- 이행 함수 종속 제거


역정규화

- 정규화된 결과를 다시 원래대로 바꾸는 작업

- 2개 이상 테이블 -> 1개의 테이블로 되돌리는 작업


N : N 관계가 발견되는 경우

- 무조건 없앤다.

- 1 : N N : 1 형태로 바꾼다