반응형
정규화 Normalization
RDBMS 설계에서 중복을 최소화하게 구조화 하는 작업을 지칭.
목적: 중복의 최소화.
이상현상 Anomaly (called 어노말리)
삽입이상, 삭제이상, 갱신이상.
삽입/갱신/삭제 작업수행 시 구조적인 오류가 나는 것.
이러한 이상현상을 오류제거를 위해 정규화를 하는 것.
1정규화(1NF = 1 Normal Form)
하나의 속성이 단일값(=원자값 =Atomic value)이고, 중복되는 항목이 없어야 한다.
각 행 row의 각 칼럼은 무조건 1개의 고유한 값을 가진다.
각 데이터가 전체 행으로 봤을때 칼럼 당 1개의 값을 가지고 중복이 없으면 1정규화를 충족한다고 볼 수 있음.
2정규화 2NF
1NF의 속성을 만족하면서, 테이블에 존재하는 모든 함수 종속 관계가 완전함수 종속이어야 한다.
1) 테이블의 컬럼이 가지고 있는 부분함수 종속을 제거한다.
ex) 기본키 A, B를 가지고 row를 식별하는데 컬럼C는 A와 관계가 있다. (두개이상의 기본키에서 둘중 하나의 키 (부분적)와 관계가 있다.)
2) 테이블의 모든 컬럼은 완전 함수 종속을 만족해야 한다.
ex) 기본키 A, B를 가지고 row 를 식별하는데 컬럼 D는 A,B 모두와 관계가 있다. (**부분종속이 더 찾기가 쉬움.)
같은 속성을 가진 컬럼을 묶어서 테이블로 분리한다 (목적이 같은것끼리 모아서 분리)
3정규화 3NF
2NF를 만족하면서 테이블에 존재하는 기본키가 아닌 필드들이 서로 독립적이어야 한다.
기본키를 제외한 컬럼들 중에 부분 함수 종속이 있는 경우 제거한다.
(기본키제외 컬럼끼리 관련있는 속성끼리 묶어서 또 분리한다.)
기본키가 아닌 모든 속성(칼럼)이 기본키가 아닌 다른 컬럼에 부분/완전함수 종속이 아니어야한다.
ex) 기본키(사원번호)를 가지고 row를 식별하는데 컬럼 [직급], [기본급], [직급수당] 은 컬럼 [직급코드] 에 종속적이다. - 이 컬럼들을 새 테이블로 분리하여 종속성을 제거하여야함.
⌘ 결국 정규화란 중복속성을 최소화하고 (업데이트 시 불일치 이상을 줄이기 위한) 종속관계에 있는 속성을 제거하는 과정이다.
이러한 정규화 과정을 다시 조인(역정규화)하면 손실없이 이전상태로 복구가 가능해야한다. 정규화하기전의 상태는(역정규화) '테이블간의 관계'가 된다.
BCNF (Boyce Codd Normal Form)
1 , 2 , 3 정규화를 만족하는 상태에서도 삽입/ 삭제/ 갱신 이상이 있을 때.
3NF을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형
ex) 수강 테이블
학생 |
과목 |
교수 |
학점 |
이가영 |
수학 |
김교수 |
A |
이나영 |
영어 |
Mr.nallson |
B |
이다영 |
영어 |
Mr.nallson |
B |
다음 테이블에서 후보키는 학생,과목 이다. 학생/과목 은 row를 유일하게 구분 할 수 있다. 하지만 이테이블의 경우 교수가 한과목만 강의한다고 가정할때, 과목의 결정자가 교수(일반컬럼)이다.
즉, 교수가 정해지면 과목이 결정된다. 하지만 교수는 후보키가 아닌 일반컬럼이다. 따라서 이 경우에 BCNF를 만족하지 못한다.
즉, 3차 정규형을 만족하면서 BCNF를 만족하지 않는경우는
일반 컬럼이 후보키를 결정하는 경우이다.
이 경우 데이터가 중복되고, 갱신이상이 발생한다. 예를들어, Mr.nallson 교수의 강의과목 명이 바뀐다면 2개의 row를 갱신해야 한다. 이를 해결하기 위해서는 마찬가지로 테이블을 분리한다.
ex) 교수테이블 분리
1- 교수테이블
교수 |
과목 |
김교수 |
수학 |
Mr.nallson |
영어 |
2- 수강테이블
학생 |
교수 |
학점 |
이가영 |
김교수 |
A |
이나영 |
Mr.nallson |
B |
이다영 |
Mr.nallson |
B |
반응형
'Back-end > DataBase' 카테고리의 다른 글
[DB]프로시저를 이용한 데이터 입력 및 검증 (0) | 2018.07.05 |
---|---|
[SQL]데이터 검증 - 중복 데이터 제거. (0) | 2018.07.01 |
sql 활용 연습문제. (0) | 2018.06.25 |
[DB]Transaction 트랜잭션이란? (0) | 2018.06.22 |
MYSQL 내장함수 Built in functions (0) | 2018.06.22 |