정규화 : 관계형 DB 설계에서 중복을 최소화하여 데이터를 구조화 하는 처리 과정
- 제 1 정규화 (같은 컬럼이 중복)
-> 중복제거, 원자값이 되도록 분해
-> 여러 값을 가진 컬럼이 존재할 수 없다.
-> 각 행과 열에는 하나의 값 만 올 수 있다.
: 중복 컬럼이 있다면 따로 하나 만들어서 값 넣음
(이름-주소1-주소2, 이름-전화번호1-전화번호2 => 이름-주소, 이름-전화번호)
- 제 2 정규화 (키가 여러개 인 경우, 한 쪽에만 의존)
-> 1NF 이후, 부분함수종속제거.
-> 모든 키가 아닌 컬럼은 기본 키 전체에 의존적이어야 한다.
-> 기본 키의 일부분에 의존적이어서는 안된다.
: 키 두 개중 하나에만 의존적이면 분리
(학번-과목-평가-과목코드-기간 => 학번-과목-평가, 과목-과목코드-기간 )
- 제 3 정규화 (키를 제외한 것들끼리 의존)
-> 2NF 이후 릴레이션 속성들간에 이행적 함수종속 제거.
-> 키가 아닌 컬럼은, 다른 키가 아닌 컬럼에 의존적이어서는 안된다.
: 키를 제외했을때 컬럼들 끼리 의존적이면 분리
(학번-자격증-자격증번호 => 학번-자격증, 자격증-자격증번호)
*cf. 2와 3은 한 키를 제외하고 나머지 중 종속 관계 인 것 중에 키 있냐 키가 없냐에 따라 구분
----------------------------------------------------------------------------------------
보통은 제 3 정규화까지만 이루어지고 그 외 정규화는 잘 이루어지지 않는다.
----------------------------------------------------------------------------------------
* BCNF (Boyce-Codd Normal Form), 강한 제 3 정규화, 3.5 정규화
-> 모든 결정자가 후보키가 되도록 하는 과정.
-> 결정자가 후보키가 아니면 분해.
(학번-과목-교수 : [학번, 과목]이 키가 되고 교수가 전공을 결정짓는 결정자가 됨.(2,3BF는 만족) -> 교수가 후보키가 되어야 됨 => 학번-과목, 교수-과목)
- 제 4 정규화
-> 다대다에 대한 해법
-> 다치종속(MVD : Multi-Valued Dependency) 속성이 3개 이상일 경우
cf. MVD : 하나의 속성값과 여러개의 속성값이 종속
-> 제 2 정규화 된 테이블(의존적인 테이블)은 다대다 관계를 가질 수 없다.
(저자-책, 학생-과목)
(레스토랑-피자종류-배달지역 => 레스토랑-피자종류, 레스토랑-배달지역)
- 제 5 정규화 (PJNF)
-> 주어진 테이블보다 더 작은 테이블의 join으로 재구성할 수 없도록 분해 (Join Dependency)
(P:Projection 분해, J:Join 다시 합침)
-> 후보키를 통하지 않은 Join종속 관계 제거
-> 한테이블 안에 키들이 모두 서로 관계
(외판원-브랜드-제품종류 -> 외판원-제품종류, 외판원-브랜드, 브랜드-제품종류)
*cf. 제 4 정규화와 제 5 정규화의 차이는 각 키끼리 관계가 하나라도 있고 없고 차이
'programing > DB' 카테고리의 다른 글
Collation 오류 (JDBC + MariaDB) (0) | 2018.11.07 |
---|---|
DAO (Data Access Objects) (0) | 2018.02.09 |
DDL, DML, DCL, TCL (0) | 2017.07.31 |