본문 바로가기

DB/Postgresql

RDB 정규화

728x90
반응형

정규화(Normalization)는 관계형 데이터베이스에서 데이터를 구조화하는 과정으로, 데이터 중복을 최소화하고 데이터 무결성을 유지하는 데 목적이 있다. 정규화는 여러 단계로 나뉘며, 각 단계는 특정 규칙을 따른다. 주요 정규형(Normal Form)은 다음과 같다:

  1. 제1정규형(1NF): 모든 열이 원자값(Atomic Value)을 가져야 한다.
  2. 제2정규형(2NF): 제1정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속(Full Functional Dependency)이어야 한다.
  3. 제3정규형(3NF): 제2정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속(Transitive Dependency)이 없어야 한다.
  4. BCNF(Boyce-Codd Normal Form): 제3정규형을 만족하고, 모든 결정자가 후보키(Candidate Key)여야 한다.

- 원자값(Atomic Value): 더 이상 분해할 수 없는 단일 값이다. 예를 들어, "홍길동"은 원자값이지만, "홍길동, 이순신"은 원자값이 아니다.

- 기본키(Primary Key): 테이블에서 각 행을 고유하게 식별할 수 있는 하나 이상의 열이다. 예를 들어, 학생 테이블에서 "학생ID"는 각 학생을 고유하게 식별할 수 있는 기본키가 될 수 있다.

- 함수 종속(Functional Dependency): 한 열의 값이 다른 열의 값에 의해 결정되는 관계입니다. 예를 들어, "학생ID"가 "학생이름"을 결정한다면, "학생이름"은 "학생ID"에 함수 종속적이다.

- 후보키(Candidate Key): 테이블에서 각 행을 고유하게 식별할 수 있는 모든 가능한 키이다. 기본키는 후보키 중 하나를 선택한 것이고, 예를 들어, "학생ID"와 "주민등록번호"가 모두 후보키가 될 수 있다.

예제

다음은 학생과 강의 데이터를 정규화하는 예제이다.

비정규화된 테이블

학생ID 학생이름 강의ID 강의이름 교수이름
1 홍길동 101 수학 김교수
2 이순신 102 영어 박교수
1 홍길동 103 과학 이교수

제1정규형(1NF)

학생ID 학생이름 강의ID
1 홍길동 101
2 이순신 102
1 홍길동 103
강의ID 강의이름 교수이름
101 수학 김교수
102 영어 박교수
103 과학 이교수

제2정규형(2NF)

학생ID 학생이름
1 홍길동
2 이순신
강의ID 강의이름 교수이름
101 수학 김교수
102 영어 박교수
103 과학 이교수
학생ID 강의ID
1 101
2 102
1 103

제3정규형(3NF)

이미 제2정규형에서 제3정규형을 만족하고 있다.

BCNF

이미 제3정규형에서 BCNF를 만족하고 있다.

 

- 끝 -

728x90
반응형