- 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
- 데이터의 중복을 줄이고 데이터 무결성을 개선하기 위해 정규화를 사용함
- 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 됨
- 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 됨
- 정규화는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF가 존재
- 보통 정규화는 속도나 용량 문제에서 3NF 혹은 BCNF 까지만 하는 경우가 많다고 함
릴레이션(relation)
- 주로 테이블과 같은 의미로 사용되며 데이터의 집합을 의미
- 튜플과 속성으로 구성되어 있음
이상 현상(Anomaly)
1. 삽입 이상(Insertion Anomaly)
- 데이터의 일부만 삽입할 수 없거나, 불필요한 중복 데이터를 삽입해야 하는 상황이 발생
- 특정 정보(예: 부서 정보)가 존재하지 않으면, 새로운 직원을 추가할 수 없는 경우
2. 삭제 이상(Deletion Anomaly)
- 데이터를 삭제할 때, 원하지 않는 중요한 데이터가 함께 삭제될 수 있음. 특정 정보를 삭제하면서 관련된 다른 정보도 함께 사라지는 경우가 발생
- 특정 직원을 삭제하면서, 그 직원이 속한 부서 정보도 함께 사라지는 경우가 발생할 수 있음
3. 갱신 이상(Update Anomaly)
- 데이터의 중복으로 인해 데이터 갱신 시 모든 중복된 데이터를 일관되게 수정하지 않으면 중복된 데이터 중 일부만 갱신되어 데이터 불일치가 발생할 수 있음
- 한 부서의 위치가 여러 레코드에 중복되어 있을 때, 하나만 수정하면 다른 레코드와 불일치가 발생할 수 있음
함수 종속성(Functional Dependency)
- DB에서 속성들간 종속 관계
- 테이블 필드의 종속 관계를 알아야 불필요한 데이터 중복을 줄이고 더욱 논리적으로 만들 수 있게 함
- 데이터 베이스 정규화에 필요한 개념
- Y가 X에 함수 종속적이다라는 것을 표기할 시 X -> Y로 표기되며, 해당 경우 X를 결정자 Y를 종속자라고 부름
- 데이터베이스 변경 시 이상현상을 제거할 수 있음
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됨
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킴
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아짐
- 질의에 대한 응답시간이 느려질수도 있음. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있음
- 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있음
- 만약 조인이 많이 발생하여 성능저하가 나타나면 반정규화(De-normalization)을 적용해야함
- 정보처리기사 암기를 위해서 정규화는 두부이걸다줘 라고 암기하는 방법이 있음
- 1정규형 - 도메인이 원자값
- 2정규형 - 부분 종속성 제거
- 3정규형 - 이행적 함수 종속 제거
- BCNF - 결정자이면서 후보키가 아닌 것 제거
- 4정규형 - 다치 종속 제거
- 5정규형 - 조인 종속성 제거
- 각 컬럼이 원자 값을 갖도록 테이블을 분해하면 1정규형을 만족함
- 1 정규형은 다음과 같은 규칙들을 만족해야함
- 각 컬럼이 하나의 속성만을 가져야 함
- 하나의 컬럼은 같은 종류나 타입의 값을 가져야 함
- 각 컬럼이 유일한 이름을 가져야 함
- 컬럼의 순서가 상관 없어야 함
- 1NF 적용 전
- 1NF 적용 후
- 제 2 정규형은 다음과 같은 규칙을 만족해야 함
- 제 1정규형을 만족
- 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 함 == 모든 컬럼이 완전 함수 종속을 만족해야 함
부분 함수 종속 (Partial Functional Dependency)
- 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부분에만 종속되어 있음
완전 함수 종속 (Full Functional Dependency)
- 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속되어 있음
- 2NF 적용 전
- 성적의 특정 값을 알기 위해서는 학생 번호 + 과목이 있어야 하는데 특정 과목의 지됴교수는 과목명만 알면 지도 교수가 누군지 알 수 있음
- 지도 교수 컬럼은 (학생번호, 과목)에 종속되지 않고 (과목)에만 종속되는 부분적 종속임
- 2NF 적용 후
- 제 3정규형은 다음과 같은 규칙을 만족해야함
- 제 2 정규형을 만족해야함
- 기본키를 제외한 속성들간의 이행 종속성 (Transitive Dependency)이 없어야 함
이행 종속
- A->B, B->C 일 때 A->C 성립하는 것
- 3NF 적용 전
- ID를 알면 등급을 알 수 있는데 여기서 이행 종속성이 존재 -> 3정규형을 만족하지 않음
- 3NF 적용 후
- 강화된 3정규형으로 모든 결정자가 후보키인 정규형
- BCNF는 다음과 같은 규칙을 만족해야함
- 3정규형을 만족해야 함
- 모든 결정자가 후보키 집합에 속해야함
- BCNF 적용 전
- (학생번호, 과목)이 기본키로 지도 교수를 알 수 있음
- 하지만 같은 과목을 다른 교수가 가르칠 숟도 있어서 과목->지도교수 종속은 성립하지 않음
- 지도교수->과목 종속이 성립. 이처럼 후보키 집합이 아닌 컬럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 함
- BCNF 적용 후
- 제 4정규형은 다음과 같은 조건을 만족해야함
- BCNF을 만족해야함
- 다치 종속성이 없어야함
다치 종속(Multi Valued Dependency)
- 특정 속성값에 따라 선택적인 속성
- 하나의 결정자가 다른 속성에서 여러 종속자를 결정할 때 다치 종속한다고 함
- 다치 종속은 이중화살표로 표기 ->>
- 두 개의 독립된 속성이 1:N 관계로 대응하는 관계
- A,B,C 세 개의 속성을 가진 릴레이션에서 어떤 복합 속성(A,C)에 대응하는 B값의 집합이 A 종속되고 C값에는 무관할 때 다치 종속이 존재
- 4NF 적용 전
- 4NF 적용 후
- 제 5정규형은 다음과 같은 조건을 만족해야함
- 4정규형을 만족해야함
- 조인 종속성이 존재
조인 종속(Join Dependency)
- 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없음
- 5NF 적용 전
- 5NF 적용 후
- 정규화에 충실하여 모델링을 수행하면 종속성, 활용성은 향상되나 수행속도가 증가 하는 경우가 발생하여 이를 극복하기 위해 성능에 중점을 두어 정규화하는 방법
- 데이터 모델링 규칙에 얽매이지 않고 수행
- 시스템이 물리적으로 구현되었을 때 성능향상을 목적으로 함
- 정규화에 충실하였으나 수행속도에 문제가 있는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정범위의 데이터만 자주 처리하는 경우
- 처리범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우
- 요약 자료만 주로 요구되는 경우
- 추가된 테이블의 처리를 위한 오버헤드를 고려하여 결정
- 인덱스의 조정이나 부분범위처리로 유도하고, 클러스터링을 이용하여 해결할 수 있는 지를 철저히 검토 후 결정
- 정규화를 하지 않으면, 테이블 간의 종속성을 올바르게 관리하지 못해 여러 이상현상이 발생할 수 있음
- 데이터의 일부만 삽입할 수 없거나, 불필요한 중복 데이터를 삽입해야 하는 상황이 발생
- 특정 정보(예: 부서 정보)가 존재하지 않으면, 새로운 직원을 추가할 수 없는 경우
- 데이터를 삭제할 때, 원하지 않는 중요한 데이터가 함께 삭제될 수 있음. 특정 정보를 삭제하면서 관련된 다른 정보도 함께 사라지는 경우가 발생
- 특정 직원을 삭제하면서, 그 직원이 속한 부서 정보도 함께 사라지는 경우가 발생할 수 있음
- 데이터의 중복으로 인해 데이터 갱신 시 모든 중복된 데이터를 일관되게 수정하지 않으면 중복된 데이터 중 일부만 갱신되어 데이터 불일치가 발생할 수 있음
- 한 부서의 위치가 여러 레코드에 중복되어 있을 때, 하나만 수정하면 다른 레코드와 불일치가 발생할 수 있음
- 여러 개의 상품이 하나의 주문에 포함될 수 있는 중복된 데이터 테이블
| 주문번호 | 고객명 | 고객주소 | 상품명 | 공급업체 | 공급업체주소 |
|---|---|---|---|---|---|
| 1001 | Alice | 123 Main St | 노트북, 마우스 | ABC Electronics | 789 Supplier Rd |
| 1002 | Bob | 456 Elm St | 키보드 | XYZ Supplies | 1010 Market St |
| 1003 | Charlie | 789 Oak St | 노트북 | ABC Electronics | 789 Supplier Rd |
- 각 필드는 원자 값을 가져야 하며 중복된 데이터가 제거 됨
| 주문번호 | 고객명 | 고객주소 | 상품명 | 공급업체 | 공급업체주소 |
|---|---|---|---|---|---|
| 1001 | Alice | 123 Main St | 노트북 | ABC Electronics | 789 Supplier Rd |
| 1001 | Alice | 123 Main St | 마우스 | ABC Electronics | 789 Supplier Rd |
| 1002 | Bob | 456 Elm St | 키보드 | XYZ Supplies | 1010 Market St |
| 1003 | Charlie | 789 Oak St | 노트북 | ABC Electronics | 789 Supplier Rd |
-
부분적 종속성을 제거(고객 주소는 고객명에 공급업체 주소는 공급업체에 종속됨). 정보와 공급 업체 분리
-
주문테이블 | 주문번호 | 고객명 | 고객주소 | |----------|---------|-------------| | 1001 | Alice | 123 Main St | | 1002 | Bob | 456 Elm St | | 1003 | Charlie | 789 Oak St |
-
상품 테이블 | 주문번호 | 상품명 | 공급업체 | 공급업체주소 | 배송업체 | |----------|----------|----------------|--------------------|------------| | 1001 | 노트북 | ABC Electronics| 789 Supplier Rd | FastShip | | 1001 | 마우스 | ABC Electronics| 789 Supplier Rd | FastShip | | 1002 | 키보드 | XYZ Supplies | 1010 Market St | QuickShip | | 1003 | 노트북 | ABC Electronics| 789 Supplier Rd | SafeShip |
-
이행적 종속성 제거(공급업체 주소는 공급업체에 종속됨)
-
주문-상품 테이블 | 주문번호 | 상품명 | 공급업체 | 배송업체 | |----------|----------|----------------|------------| | 1001 | 노트북 | ABC Electronics| FastShip | | 1001 | 마우스 | ABC Electronics| FastShip | | 1002 | 키보드 | XYZ Supplies | QuickShip | | 1003 | 노트북 | ABC Electronics| SafeShip |
-
공급 업체 테이블 | 공급업체 | 공급업체주소 | |----------------|--------------------| | ABC Electronics| 789 Supplier Rd | | XYZ Supplies | 1010 Market St |
-
다치 종속성 제거(하나의 키가 여러 독립적인 속성 집합에 대해 종속된 종속 관계를 가짐)
-
주문-상품 테이블 | 주문번호 | 상품명 | 공급업체 | |----------|----------|----------------| | 1001 | 노트북 | ABC Electronics| | 1001 | 마우스 | ABC Electronics| | 1002 | 키보드 | XYZ Supplies | | 1003 | 노트북 | ABC Electronics|
-
주문-배송업체 테이블 | 주문번호 | 배송업체 | |----------|------------| | 1001 | FastShip | | 1002 | QuickShip | | 1003 | SafeShip |
-
조인 종속성을 제거. 모든 종속성을 독립된 테이블로 분해하여 복원 가능하게 만듬
-
주문-상품 테이블 | 주문번호 | 상품명 | |----------|----------| | 1001 | 노트북 | | 1001 | 마우스 | | 1002 | 키보드 | | 1003 | 노트북 |
-
상품-공급업체 테이블 | 상품명 | 공급업체 | |----------|----------------| | 노트북 | ABC Electronics| | 마우스 | ABC Electronics| | 키보드 | XYZ Supplies |
-
주문-배송업체 테이블 | 주문번호 | 배송업체 | |----------|------------| | 1001 | FastShip | | 1002 | QuickShip | | 1003 | SafeShip |
- 종속성 관리보다 데이터 접근성 요구, 성능 향상이 필요한 경우 주로 역정규화를 고려해볼 수 있음
- 역정규화가 유리한 경우
- 성능 향상: JOIN 연산이 많아 쿼리 성능이 저하될 때
- 복잡한 쿼리 간소화: 자주 함께 사용되는 데이터를 결합하여 조회를 단순화할 때
- 읽기 성능 최적화: 대량의 읽기 작업이 필요할 때
- 보고서나 분석 작업: 빠른 조회가 필요한 데이터에 대해 미리 결합된 형태로 관리할 때













