정규화란?
- 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
- 이상현상이 존재하는 릴레이션을 분해하여 여러개의 릴레이션을 생성하게 됨
👉 이를 단계별로 구분, 정규형이 높아질수록 이상현상은 줄어듦
장점과 단점
- 장점
- 데이터베이스 변경 시 이상 현상 제거할 수 있음
- 정규화된 데이터베이스 구조에서 새로운 데이터 형의 추가로 인한 확장 시,
그 구조를 변경하지 않아도 되거나 일부만 변경해도 됨 - 데이터베이스와 연동된 응용 프로그램에서 최소한의 영향만을 미치게 돼 응용 프로그램의 생명을 연장시킴
- 단점
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아짐
- 질의에 대한 응답 시간이 느려질 수도 있음
-데이터 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약됨
👉 한 테이블의 데이터 용량이 최소화되는 효과가 있음 - 데이터를 처리할 때의 속도가 빨라질 수도 있고 느려질 수도 있음
- 조인이 많이 발생하여 성능 저하가 나타나면 반정규화를 적용할 수도 있음
제 1 정규형(1NF)
- 각 컬럼이 하나의 속성만을 가져야함
- 하나의 컬럼은 같은 종류나 타입의 값을 가져야함
- 각 컬럼이 유일한 이름을 가져야함
- 컬럼의 순서가 상관없어야 함
예시)
번호 | 이름 | 음식 |
01 | 이선욱 | 감자탕, 계란찜 |
02 | 삼선욱 | 소곱창, 등갈비 |
각 칼럼이 하나의 값만을 가져야함 - X
이유) 음식에 두가지 값을 갖고 있음
수정)
번호 | 이름 | 음식 |
01 | 이선욱 | 감자탕 |
01 | 이선욱 | 계란찜 |
02 | 삼선욱 | 소곱창 |
02 | 삼선욱 | 등갈비 |
제 2 정규형(2NF)
- 1정규형을 만족해야 한다.
- 모든 컬럼이 부분적 종속이 없어야함 즉, 모든 칼럼이 완전 함수 종속을 만족해야함
부분적 종속
- 기본키 중 특정 컬럼에만 종속되는 것
완전 함수 종속
- 기본키의 부분집합이 결정자가 되면 안 되는 것 (비슷한 의미임)
예시)
번호 | 주문자 | 음식 | 가격 |
01 | 이선욱 | 감자탕 | 10,000 |
02 | 삼선욱 | 등갈비 | 16,000 |
기본키(번호, 음식) - 가격
음식 - 주문자
주문자는 기본키에 종속되지 않고 음식에만 종속되는 부분 종속
👉 제 2정규화 만족 X
수정)
번호 | 음식 | 가격 |
01 | 감자탕 | 10,000 |
02 | 등갈비 | 16,000 |
음식 | 주문자 |
감자탕 | 이선욱 |
등갈비 | 삼선욱 |
위와 같이 분해하면 제 2정규형을 만족함
제 3정규형(3NF)
- 2정규형을 만족해야 함
- 기본키를 제외한 속성들 간의 이행 종속성이 없어야 함
이행 종속성
- A👉B, B👉C 일때 A👉C가 성립하면 이행 종속이라 함
예시)
음식 번호 | 음식 | 가격 |
01 | 감자탕 | 10,000 |
02 | 등갈비 | 16,000 |
음식 번호를 알면 음식을 알 수 있음
음식을 알면 가격을 알 수 있음
👉 음식번호를 알면 가격을 알 수 있음
때문에 제 3정규형 만족 X
수정)
음식 번호 | 음식 |
01 | 감자탕 |
02 | 등갈비 |
음식 | 가격 |
감자탕 | 10,000 |
등갈비 | 16,000 |
BCNF(Boyce-Codd Normal Form)
BCNF는 제 3정규형을 좀 더 강화한 버전
- 3정규형을 만족해야 됨
- 모든 결정자가 후보키 집합에 속해야 함
👉 후보키 집합에 없는 칼럼이 결정자가 돼선 안 됨
주문 번호 | 이름 | 음식 |
01 | 이선욱 | 감자탕 |
02 | 삼선욱 | 등갈비 |
주문번호, 음식이 기본키로 이름을 알 수 있음
but) 같은 음식을 시킨 다른 사람이 있을 수 있음
👉 음식이 주문자에 종속 성립되지 않음
but) 어떤 주문자가 어떤 음식을 시켰는지 알 수 있음
👉 주문자-음식 종속이 성립됨
이와 같은 상황때매 BCNF를 만족하지 않음
수정)
주문 번호 | 이름 |
01 | 이선욱 |
02 | 삼선욱 |
이름 | 음식 |
이선욱 | 감자탕 |
삼선욱 | 등갈비 |
'CS' 카테고리의 다른 글
ep 08-1.교착상태 (0) | 2023.01.08 |
---|---|
ep 07-2. 트랜잭션 (0) | 2023.01.01 |
ep 06-1.Hash (0) | 2022.12.18 |
ep 05-2. Primary index vs Secondary index /Composite (0) | 2022.12.03 |
ep 05-1. index (0) | 2022.12.02 |