[TIL] 24.10.02 WED

GDORI·2024년 10월 2일
0

TIL

목록 보기
59/79
post-thumbnail

정규화란 무엇인가.

데이터베이스를 설계는 프로그램을 설계하는데에 있어 제일 중요한 뼈대를 세우는 것과 같다고 생각한다. 기본 철골 구조가 탄탄하지 못하고 구역을 획기적으로 나누지 못한다면 추후 완성된 건물이 안정적이지 못하고 구조 변경에도 큰 힘이 들 것이다.
따라서, 프로그램을 설계하는 과정에서 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 적용 테이블

  • 학생 - 과목 테이블:
학생 ID과목명
1수학
1영어
2수학
  • 과목 - 교수 테이블:
과목명교수명
수학김 교수
영어이 교수

제 3 정규형 (3NF)

제 3 정규형에서는 이행 종속성을 제거해야한다.
1. 제 2 정규형을 만족하면서, 컬럼 속성 간의 종속성을 제거한다.

예시

3NF 위반 테이블 (이행 종속성 존재)

학생 ID과목명교수명교수 전화번호
1수학김 교수010-1111-1111
1영어이 교수010-2222-2222
2수학김 교수010-1111-1111

3NF 적용 테이블

  • 학생 - 과목 테이블:
학생 ID과목명
1수학
1영어
2수학
  • 과목 - 교수 테이블:
과목명교수명
수학김 교수
영어이 교수
  • 교수 - 전화번호 테이블:
교수명교수 전화번호
김 교수010-1111-1111
이 교수010-2222-2222

부분 종속성과 이행 종속성은 무엇인가?

부분 종속성은 위 2NF 예시에서 학생 ID와 과목명이 복합 기본키일 때 교수명의 경우 과목명에게만 의존되는 경우이다. 학생 ID와 교수명 둘만 보았을 때에는 관련이 없으니 부분 종속성이라고 볼 수 있는 것이다. 따라서 교수명의 경우 과목에 대한 테이블을 따로 분리해서 관리 해야하는 것이다.

이행 종속성은 학생 ID가 과목명에 종속 되어있고 과목명이 교수명에 종속되어 있고, 다시 교수명이 교수 전화번호에 종속되어 있는 경우이다. (A-B B-C C-D ... )
따라서 이 경우에는 교수 정보를 별도로 분리시켜야 한다.

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글