본문 바로가기
데이터베이스(SQL)/데이터베이스 개념

[DB] 데이터베이스 정규화 & 참조 무결성 정리

by char_lie 2023. 4. 16.
반응형

정규화

  • 데이터 구조를 더 좋은 구조로 바꾸는 과정
  • 테이블을 쪼개거나 합치는 것
  • 데이터의 중복 최소화, 데이터의 무결성을 보장하기 위함
  • 총 6개의 과정이 존재 → 일반적으로는 3~4개까지만 사용
  • 다음 단계의 정규화를 위해서는 이전 정규화가 완료되어야 함

제1 정규형(1NF)

  • 모든 필드의 데이터가 원자값(Atomic Value)을 가지도록 테이블을 구성하는 것
  • 각 필드의 데이터가 하나의 값만을 갖도록 하는 것
  • 테이블 간 중복되는 데이터가 없도록 하기 위함

↓ ↓ ↓ 정규화 진행 시

제2 정규형(2NF)

  • 테이블이 제1 정규형을 만족해야 함
  • 테이블 내의 모든 필드는 해당 테이블의 주식별자(pk)에만 종속되어야 한다.
  • 부분 종속 관계를 제거하기 위한 정규화
  • 관계가 없는 테이블끼리 묶이지 않도록 테이블을 분리하는 과정

예시)

  • 제1 정규화를 거친 테이블에서 중복 데이터로 인해 학생과 생년월일로 구분 불가능
  • 학생과 수강과목을 합친 [학생, 수강과목] 키로 각각 구별 가능 (학생과 수강과목을 알면 생년월일을 알 수 있음)
  • 생년월일은 학생에 종속되어 있어, 학생을 알면 생년월일을 바로 알 수 있음

↓ ↓ ↓ 정규화 진행 시

[학생정보] 테이블

[과목] 테이블

제3 정규형(3NF)

  • 테이블이 제2 정규형을 만족해야 함
  • 테이블 내의 이행정 종속 관계를 제거하기 위한 정규화
  • 주 식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다는 점

예시)

  • 고객 번호를 알면 각 칼럼의 속성 값들을 알 수 있음
  • 회원 등급은 고객 번호에 의해 결정되고, 등급코드는 회원 등급에 의해 결정되는 구조
  • 등급코드 ⊂ 회원등급 (X ⊂ Y), 회원 등급 ⊂ 고객번호 (Y ⊂ Z)인 상태
  • 등급코드 ⊂ 고객번호(X ⊂ Z)가 되어버리면서 이행 함수 종속이 발생. 이를 제거하는 과정이 제3 정규화

↓ ↓ ↓ 정규화 진행 시

[고객정보] 테이블

[등급] 테이블

정규화 단점

  • 개발자가 사용하기 어려움
  • 성능이 떨어질 수 있음

참조 무결성

  • 데이터 모델에서 정의된 실체 간의 관계 조건을 유지하는 것
  • 외래키 값은 NULL이거나 참조하는 릴레이션의 기본키 값과 동일해야 함
  • 각 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음 (참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경 불가)
  • ex) [과목] 릴레이션에서 학번 속성에는 [학생] 릴레이션의 학번 속성에 없는 값은 입력 불가
반응형

댓글