본문으로 건너뛰기

Database-Normalization

1 Database Normalization

  • 데이터베이스 정규화는 데이터 중복을 줄이고 데이터 무결성을 향상시키기 위해 일련의 정규 양식에 따라 관계형 데이터베이스를 구성하는 과정이다.
  • 에드가 F에 의해 처음 제안되었다
  • 정규화에는 데이터베이스의 Column과 table을 구성하여 데이터베이스 무결성 제약 조건에 의해 종속성이 적절하게 적용되도록 하는 작업이 수반됩니다.
  • 이것은 합성 과정(새 데이터베이스 설계 생성) 또는 분해 과정(기존 데이터베이스 설계 개선)에 의해 일부 공식 규칙을 적용함으로써 달성된다.

2 이상(anomaly)

  • 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
  • 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생

이상의 원인

  • 이상은 속성들 간에 존재하는 여러 종류의 종속 관계를 하나의 릴레이션에 표현할 때 발생한다

2.1 Update anomaly

  • 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생

예시

img

  • 직원의 스킬을 나타내는 릴레이션
  • Employee ID, Employee Address, Skill 속성으로 구성됨
  • 한 직원이 이사를 가서 주소가 변경됨
    • 96 Walnut Avenue -> 94 chestnut street
    • 따라서 아래 2개의 레코드의 주소를 모두 변경해야 한다
    • 만약 모두를 변경하지 않고 일부만 변경한 경우 해당 릴레이션은 일관성이 깨진 상태가 된다

2.2 Insertion anomaly

  • 릴레이션에 새로운 레코드를 삽입할 수 없는 현상
  • 데이터 삽입 시 의도와 다른 값들도 삽입됨

예시

img

  • 교수와 자신의 수업을 나타내는 테이블이 있다
  • Faculty ID, Faculty Name, Faculty Hire Date, Course Code의 속성을 가짐
  • 만약 새롭게 임명된 교수는 현재 진행하는 수업이 없기 때문에 테이블에 삽입 할 수 없다
    • Course Code가 not null인 경우

2.3 Deletion anomaly

  • 특정 데이터를 삭제할 때 삭제하지 말아야할 다른 데이터까지 삭제되는 현상
  • 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨

예시

img

  • 교수와 자신의 수업을 나타내는 테이블이 있다
  • Faculty ID, Faculty Name, Faculty Hire Date, Course Code의 속성을 가짐
    • Course Code는 not null
  • 교수가 일시적으로 수업을 그만두는 경우 Course Code 속성만 null로 만들 수 없기 때문에 해당 레코드를 삭제해야한다
    • 교수의 수업 데이터만 삭제하고 싶은데 교수의 데이터까지 삭제되는 문제 발생

3 함수 종속(functional dependency)

  • 데이터베이스의 릴레이션(relation)에서 두 개의 애트리뷰트(attribute) 집합 간 제약의 일종이다.
  • 어떤 릴레이션 R에서, X와 Y를 각각 R의 애트리뷰트 집합의 부분 집합이라 하자.
  • 애트리뷰트 X의 값 각각에 대해 시간에 관계없이 항상 애트리뷰트 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 한다
  • X → Y라고 표기한다
  • X를 결정자(determinant set)이라 하고, Y를 종속자(dependent attribute)라고 한다

3.1 완전 함수 종속

  • 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우

3.2 부분적 함수 종속

  • 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속된 경우

3.3 이행적 함수 종속

  • 릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 합니다. 즉, X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우

4 정규화

  • 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
  • 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할

4.1 1NF

  • 릴레이션에 속한 모든 도메인이 원자값이어야 한다
  • 원자값이란 단일 값을 의미한다. 따라서 다중 값을 갖으면 안된다

1NF를 만족하지 않는 릴레이션

수강과목수강자
수학홍길동
과학임꺽정, 신사임당
사회홍길동, 임꺽정
  • 발생할 수 있는 이상(Anomaly)의 예
    • 갱신이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
      • UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
    • 삭제 이상: 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
      • DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'

1NF를 만족시키는 릴레이션

  • 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
수강과목수강자일련번호
수학홍길동1
과학임꺽정2
과학신사임당3
사회홍길동4
사회임꺽정5

4.2 2NF

  • 2NF를 만족하려면 부분적 함수 종속을 제거해야 한다.
  • 즉 완전 함수 종속이 되도록 해야 한다.

2NF를 만족하지 않는 릴레이션

학번이름소속학과학과장
1901홍길동컴퓨터과김교수
1845임꺽정전자과박교수
1706신사임당기계과천교수
1925장영실컴퓨터과김교수
  • 학번이 기본키(한 학과내의 이름은 중복되지 않는다고 가정)
  • 부분적 함수 종속
    • 학번 -> 학과장
    • 소속학과 -> 학과장
    • 학과장이라는 종속자가 기본키(학번)가 아닌 다른 속성(소속학과)에 종속되므로 부분적 함수 종속이다
    • 즉 학과장이라는 속성이 이 릴레이션에 꼭 필요한 속성이 아니며 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.
    • 갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
    • 삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.

2NF를 만족시키는 릴레이션

  • 아래와 같이 릴레이션을 구분하는 것이 바람직하다
학번이름소속학과
1901홍길동컴퓨터과
1845임꺽정전자과
1706신사임당기계과
1925장영실컴퓨터과
학과학과장
컴퓨터과김교수
전자과박교수
기계과천교수

4.3 3NF

  • 3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.

3NF를 만족하지 않는 릴레이션

학번이름소속학과대학
1901홍길동컴퓨터과공대
1845임꺽정전자과공대
1706신사임당경제경상
1925장영실경영경상
  • 이행적 함수 종속발생
    • 이름 -> 소속학과 종속 관계(한 학과내의 이름은 중복되지 않는다고 가정)
    • 소속학과 -> 대학 종속 관계
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입이상: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
    • 갱신이상: 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
    • 삭제이상: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.

3NF를 만족시키는 릴레이션

학번이름소속학과
1901홍길동컴퓨터과
1845임꺽정전자과
1706신사임당경제
1925장영실경영
소속학과대학
컴퓨터과공대
전자과공대
경제경상
경영경상

4.2 BCNF

  • BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.

BCNF를 만족하지 않는 릴레이션

학번과목교수
100데이터베이스홍길동
100자료구조임꺽정
200네트워크장영실
300인공지능유관순
  • 제약사항
    • 한 학생은 동일한 과목에 대해 한교수에게만 수강가능
    • 각 교수는 하나의 과목만 담당
    • 한 과목은 여러 교수가 담당가능
  • (학번 + 과목)은 교수를 결정 짓는다.
  • 교수는 과목을 결정 짓는다.
  • 즉, 교수 또한 결정자인데 교수는 학번을 결정 지을 수 없으므로 후보키는 아니다.
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입이상: 200학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
    • 갱신이상: 홍길동의 담당 과목이 알고리즘으로 바뀌었다. 담당 과목을 변경할 경우, 학생의 수강 과목이 변경되어 버린다.
    • 삭제이상: 300학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.

BCNF를 만족시키는 릴레이션

학번과목코드
100DB01
100DS01
200NW01
300AI01
과목코드과목교수
DB01데이터베이스홍길동
DS01자료구조임꺽정
NW01네트워크장영실
AI01인공지능유관순

참고