Day90 Final Project(DB모델링)
DB모델링
3. DB모델링 절차
6) 제 2 정규화
- 제2정규화(Second Normal Form, 2NF)는 데이터베이스 설계에서 테이블의 데이터를 중복 없이 효율적으로 저장하기 위한 정규화 과정 중 하나다. 제2정규화의 목표는 부분 함수 종속성을 제거하여 데이터의 무결성을 높이고 중복을 최소화하는 것이다.
제2정규화 조건
- 제2정규화를 적용하려면 먼저 테이블이 제1정규형(1NF)이어야 한다. 즉, 테이블이 원자 값(atomic value)만을 가지고 있어야 한다. 제1정규형을 만족한 후에, 제2정규형을 만족하기 위해서는 다음 두 가지 조건을 만족해야 한다.
- 테이블이 제1정규형이어야 한다.
- 테이블 내의 모든 속성값이 원자 값을 가져야 하며, 각 열에 저장된 값은 더 이상 나눌 수 없는 최소 단위여야 한다.
- 부분 함수 종속성을 제거해야 한다.
- 부분 함수 종속성은 복합 기본 키(Primary Key)를 가진 테이블에서 발생할 수 있다. 기본 키의 일부만을 이용하여 결정되는 속성이 있을 경우, 이를 부분 함수 종속성이라고 한다. 제2정규형에서는 기본 키의 일부에 의해서 결정되는 속성이 없어야 하며, 테이블의 모든 비기본 키 속성은 기본 키 전체에 종속되어야 한다.
예시
예를 들어, 학생 수업 정보를 담은 테이블이 있다고 가정해 보자.
학번 (Primary Key) | 과목명 (Primary Key) | 교수명 | 학생 이름 |
---|---|---|---|
101 | 데이터베이스 | 김교수 | 홍길동 |
101 | 운영체제 | 이교수 | 홍길동 |
102 | 데이터베이스 | 김교수 | 박철수 |
위 테이블은 제1정규형을 만족하지만, 제2정규형은 만족하지 않는다. 그 이유는 비기본 키인 “학생 이름”이 “학번”에 의해 결정되기 때문이다. 즉, 부분 함수 종속성이 발생한 것이다. “학생 이름”은 “과목명”에 종속되지 않고, “학번”에만 종속되어 있어 부분 종속을 제거할 필요가 있다.
이를 제2정규형으로 변환하면 다음과 같은 두 개의 테이블로 나눌 수 있다.
학생 테이블 (Student Table):
학번 (Primary Key) | 학생 이름 |
---|---|
101 | 홍길동 |
102 | 박철수 |
수업 테이블 (Class Table):
학번 (Primary Key) | 과목명 (Primary Key) | 교수명 |
---|---|---|
101 | 데이터베이스 | 김교수 |
101 | 운영체제 | 이교수 |
102 | 데이터베이스 | 김교수 |
이제 각 비기본 키 속성은 전체 기본 키에 종속되며, 부분 함수 종속성이 제거되었다. 이로써 제2정규형을 만족하게 된다.
제2정규형은 데이터 중복을 줄이고 무결성을 유지하는 데 매우 유용하며, 다음 단계인 제3정규형(3NF)으로 이어지는 기반을 마련해 준다.
7) 제 3 정규화
- 제3정규화(Third Normal Form, 3NF)는 데이터베이스 정규화 과정 중 하나로, 데이터 중복을 더 줄이고 데이터의 무결성을 강화하기 위해 사용된다. 제3정규화의 목표는 이행적 함수 종속성을 제거하는 것이다.
제3정규화 조건
- 제3정규화를 적용하려면 먼저 테이블이 제2정규형(2NF)을 만족해야 한다. 그 후, 제3정규화를 만족하기 위해서는 다음 조건을 충족해야 한다.
- 테이블이 제2정규형이어야 한다.
- 제2정규형에서는 모든 비기본 키 속성이 기본 키 전체에 종속되어야 한다.
- 이행적 함수 종속성을 제거해야 한다.
- 이행적 함수 종속성은 기본 키에 직접 종속되지 않고, 다른 비기본 키 속성을 통해 간접적으로 종속되는 경우다. 즉, 비기본 키 A가 비기본 키 B에 종속되고, B가 기본 키에 종속될 때, A는 기본 키에 이행적으로 종속되었다고 한다. 제3정규형에서는 이런 이행적 종속성을 제거해야 한다.
예시
아래와 같은 학생 정보를 담은 테이블을 예로 들어보자.
학번 (Primary Key) | 학생 이름 | 학과 코드 | 학과 이름 |
---|---|---|---|
101 | 홍길동 | CSE | 컴퓨터공학과 |
102 | 박철수 | ECE | 전자공학과 |
이 테이블은 제2정규형을 만족하지만, 제3정규형은 만족하지 않는다. 그 이유는 이행적 함수 종속성이 있기 때문이다. “학과 이름”은 “학번”에 직접 종속되지 않고, “학과 코드”를 통해 간접적으로 종속된다. 즉, “학과 이름”은 “학과 코드”에 종속되고, “학과 코드”는 “학번”에 종속되므로, “학과 이름”은 “학번”에 이행적으로 종속된 것이다.
이를 제3정규형으로 변환하려면 테이블을 두 개로 나누어야 한다.
학생 테이블 (Student Table):
학번 (Primary Key) | 학생 이름 | 학과 코드 |
---|---|---|
101 | 홍길동 | CSE |
102 | 박철수 | ECE |
학과 테이블 (Department Table):
학과 코드 (Primary Key) | 학과 이름 |
---|---|
CSE | 컴퓨터공학과 |
ECE | 전자공학과 |
이제 “학과 이름”은 “학과 코드”에 직접 종속되며, 더 이상 이행적 종속이 발생하지 않는다. 따라서 이 테이블들은 제3정규형을 만족하게 된다.
제3정규화의 장점
- 데이터 중복 최소화: 이행적 종속성을 제거함으로써 데이터 중복을 줄일 수 있다.
- 데이터 무결성 향상: 데이터가 변경될 때, 중복 데이터로 인해 발생할 수 있는 오류를 방지할 수 있다.
제3정규형은 일반적으로 실무에서 많이 사용되는 정규화 단계 중 하나로, 데이터베이스 성능과 무결성을 균형 있게 유지하는 데 중요한 역할을 한다.