반응형
정규화
- 데이터 구조를 더 좋은 구조로 바꾸는 과정
- 테이블을 쪼개거나 합치는 것
- 데이터의 중복 최소화, 데이터의 무결성을 보장하기 위함
- 총 6개의 과정이 존재 → 일반적으로는 3~4개까지만 사용
- 다음 단계의 정규화를 위해서는 이전 정규화가 완료되어야 함
제1 정규형(1NF)
- 모든 필드의 데이터가 원자값(Atomic Value)을 가지도록 테이블을 구성하는 것
- 각 필드의 데이터가 하나의 값만을 갖도록 하는 것
- 테이블 간 중복되는 데이터가 없도록 하기 위함
↓ ↓ ↓ 정규화 진행 시
제2 정규형(2NF)
- 테이블이 제1 정규형을 만족해야 함
- 테이블 내의 모든 필드는 해당 테이블의 주식별자(pk)에만 종속되어야 한다.
- 부분 종속 관계를 제거하기 위한 정규화
- 관계가 없는 테이블끼리 묶이지 않도록 테이블을 분리하는 과정
예시)
- 제1 정규화를 거친 테이블에서 중복 데이터로 인해 학생과 생년월일로 구분 불가능
- 학생과 수강과목을 합친 [학생, 수강과목] 키로 각각 구별 가능 (학생과 수강과목을 알면 생년월일을 알 수 있음)
- 생년월일은 학생에 종속되어 있어, 학생을 알면 생년월일을 바로 알 수 있음
↓ ↓ ↓ 정규화 진행 시
[학생정보] 테이블
[과목] 테이블
제3 정규형(3NF)
- 테이블이 제2 정규형을 만족해야 함
- 테이블 내의 이행정 종속 관계를 제거하기 위한 정규화
- 주 식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다는 점
예시)
- 고객 번호를 알면 각 칼럼의 속성 값들을 알 수 있음
- 회원 등급은 고객 번호에 의해 결정되고, 등급코드는 회원 등급에 의해 결정되는 구조
- 등급코드 ⊂ 회원등급 (X ⊂ Y), 회원 등급 ⊂ 고객번호 (Y ⊂ Z)인 상태
- 등급코드 ⊂ 고객번호(X ⊂ Z)가 되어버리면서 이행 함수 종속이 발생. 이를 제거하는 과정이 제3 정규화
↓ ↓ ↓ 정규화 진행 시
[고객정보] 테이블
[등급] 테이블
정규화 단점
- 개발자가 사용하기 어려움
- 성능이 떨어질 수 있음
참조 무결성
- 데이터 모델에서 정의된 실체 간의 관계 조건을 유지하는 것
- 외래키 값은 NULL이거나 참조하는 릴레이션의 기본키 값과 동일해야 함
- 각 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음 (참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경 불가)
- ex) [과목] 릴레이션에서 학번 속성에는 [학생] 릴레이션의 학번 속성에 없는 값은 입력 불가
반응형
'데이터베이스(SQL) > 데이터베이스 개념' 카테고리의 다른 글
[DB] Django의 Filter 및 ORM과 참조 개념 정리 (0) | 2023.04.16 |
---|---|
[DB]관계형 데이터베이스 정리 & DDL, DML, JOIN 사용 정리 (0) | 2023.04.16 |
댓글