CS/DataBase

[DataBase] DB 정규화 (1NF~BCNF)

_윤 2024. 3. 23. 15:23
728x90

DB 정규화란?

데이터베이스 내의 데이터 구조를 조직화, 최적화하는 과정

목적

  • 테이블 간 중복된 데이터를 제거, 허용하지 않는 것
  • 중복된 데이터를 허용하지 않음으로써 데이터 무결성 유지
  • DB의 저장 용량 확보

장점

  • 데이터베이스 변경시 이상 현상 제거 가능
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향을 미쳐 생명력 연장 시킴

이상 현상이란?

  1. 삽입 이상 : 데이터 삽입시 의도와 다른 값이 함께 삽입
  2. 삭제 이상 : 데이터 삭제시 의도와 다른 값이 함께 삭제
  3. 갱신 이상 : 속성값 갱신시 일부 튜플만 갱신

단점

  • 릴레이션간 분해로 인한 JOIN 연산 증가
  • 조인 연산 증가에 대한 성능 저하는 반정규화를 통해 해결 가능

제 1 정규형(1NF)

: 데이터베이스의 각 컬럼이 원자 값(하나의 값)을 가지도록 하는 것

  1. 각 컬럼은 유일한 이름을 가져야함
  2. 각 컬럼은 하나의 속성만을 가져야함
  3. 하나의 컬럼은 같은 종류/타입이어야함
  4. 칼럼의 순서는 상관이 없어야함

위 릴레이션은 제 1 정규형을 만족할까?

  • 2번 조건 위배
  • 1, 3번째 튜플은 과목에 대해 두 개의 값을 가지기 때문
  • 제 1 정규형을 만족하기 위해선 아래와 같이 릴레이션을 변경해야함


제 2 정규형(2NF)

  1. 제 1 정규형을 만족해야함
  2. 모든 컬럼은 부분적 종속 없이, 완전 종속을 만족해야함

위 릴레이션은 제 2 정규형을 만족할까?

  • 2번 조건 위배
  • 위 릴레이션의 기본키는 (학생번호, 강좌이름)임
  • (학생번호, 강좌이름)은 성적을 결정하지만, (강좌이름)은 강의실을 결정함
  • 제 2 정규형을 만족하기 위해선 아래와 같이 릴레이션을 변경해야함


제 3 정규형(3NF)

  1. 제 2 정규형을 만족해야함
  2. 기본키를 제외한 속성들간의 이행적 함수 종속성이 없어야함

이때, 이행적 함수 종속성이란 A->B, B->C 일 때, A->C 가 성립하는 관계

위 릴레이션은 제 3 정규형을 만족할까?

  • 2번 조건 위배
  • 학생 번호에 따라 강좌이름이 결정되고, 강좌이름에 따라 수강료가 결정됨
  • 만약 어떤 학생이 강좌이름을 변경한다고 했을 때, 그에 맞춰 수강료 또한 변경해주어야 하는 일이 발생
  • 제 3 정규형을 만족하기 위해선 아래와 같이 릴레이션을 변경해야함


보이스코드 정규형 (BCNF)

  1. 제 3 정규형을 만족해야함
  2. 모든 결정자가 후보키 집합에 속해야함

결정자란?
어떤 속성의 값이 다른 속성의 값을 고유하게 결정할 수 있을 때, 결정자라고 함

위 릴레이션은 BCNF를 만족할까?

  • 2번 조건 위배
  • (학생번호, 특강이름)은 교수를 결정하고, (교수)는 특강이름을 결정하지만 교수는 후보키가 아님
  • BCNF를 만족하기 위해선 아래와 같이 릴레이션을 변경해야함


제 4 정규화와 제 5 정규화에 대해서는 해당 링크 참조


[참고자료]

(DB) 데이터베이스의 정규화란
데이터베이스 정규화란?

728x90
반응형