정규화란 무엇인가.
데이터베이스를 설계는 프로그램을 설계하는데에 있어 제일 중요한 뼈대를 세우는 것과 같다고 생각한다. 기본 철골 구조가 탄탄하지 못하고 구역을 획기적으로 나누지 못한다면 추후 완성된 건물이 안정적이지 못하고 구조 변경에도 큰 힘이 들 것이다.
따라서, 프로그램을 설계하는 과정에서 DB설계를 확실히 해야하는데, 이 때 거치는 중복 제거, 데이터 무결성 검증 등의 과정이 정규화이다.
제 1 정규형 (1NF)
제 1정규형에서는 원자성과 중복레코드에 대한 작업을 수행한다.
1. 각 열의 값이 더 이상 나눌 수 없는 원자적 값이 되어야 하며 하나의 열에 여러가지 값이 들어가면 안된다.
2. 테이블에서 중복되는 레코드가 없어야 한다.
예시
1NF 위반 테이블 (전화번호에 여러 값 존재)
학생 ID | 이름 | 전화번호 |
---|
1 | 태식 | 010-1111-2222, 010-3333-4444 |
2 | 은지 | 010-5555-6666 |
1NF 적용 테이블 (원자값으로 분리)
학생 ID | 이름 | 전화번호 |
---|
1 | 태식 | 010-1111-2222 |
1 | 태식 | 010-3333-4444 |
2 | 은지 | 010-5555-6666 |
제 2 정규형 (2NF)
제 2 정규형에서는 부분 종속성을 제거하고 기본키 하나에 모든 키들이 종속되는 작업을 수행한다.
1. 제 1 정규형을 만족하면서, 기본키 일부에만 종속되는 속성이 없어야 한다.
2. 나머지 컬럼이 기본키에 종속 되어야 한다.
예시
2NF 위반 테이블 (부분 종속성 존재)
학생 ID | 과목명 | 교수명 |
---|
1 | 수학 | 김 교수 |
1 | 영어 | 이 교수 |
2 | 수학 | 김 교수 |
2NF 적용 테이블
제 3 정규형 (3NF)
제 3 정규형에서는 이행 종속성을 제거해야한다.
1. 제 2 정규형을 만족하면서, 컬럼 속성 간의 종속성을 제거한다.
예시
3NF 위반 테이블 (이행 종속성 존재)
학생 ID | 과목명 | 교수명 | 교수 전화번호 |
---|
1 | 수학 | 김 교수 | 010-1111-1111 |
1 | 영어 | 이 교수 | 010-2222-2222 |
2 | 수학 | 김 교수 | 010-1111-1111 |
3NF 적용 테이블
교수명 | 교수 전화번호 |
---|
김 교수 | 010-1111-1111 |
이 교수 | 010-2222-2222 |
부분 종속성과 이행 종속성은 무엇인가?
부분 종속성은 위 2NF 예시에서 학생 ID와 과목명이 복합 기본키일 때 교수명의 경우 과목명에게만 의존되는 경우이다. 학생 ID와 교수명 둘만 보았을 때에는 관련이 없으니 부분 종속성이라고 볼 수 있는 것이다. 따라서 교수명의 경우 과목에 대한 테이블을 따로 분리해서 관리 해야하는 것이다.
이행 종속성은 학생 ID가 과목명에 종속 되어있고 과목명이 교수명에 종속되어 있고, 다시 교수명이 교수 전화번호에 종속되어 있는 경우이다. (A-B B-C C-D ... )
따라서 이 경우에는 교수 정보를 별도로 분리시켜야 한다.