데이터베이스 정규화

LeeJ·2023년 3월 14일
0

CS

목록 보기
9/11

정규화란?

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 일반적으로 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다. 정규화의 목적은 하나의 테이블에서의 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인하여 데이터베이스의 나머지 부분들로 전파되게 하는 것이다.
위키피디아

Why?

이상(Anomaly) 현상

  • 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상입니다.
  • 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제가 발생합니다.
  • 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생합니다.

이상 현상의 종류

  • 삽입 이상(Insertion Anomaly)
    • 데이터 삽입 시 의도와 다른 값들도 삽입됨
  • 삭제 이상(Delete Anomaly)
    • 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨
  • 갱신 이상(Update Anomaly)
    • 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생

정규화 과정

1NF (First Normal Form)

1NF를 만족하려면 도메인이 원자값(Atomic Value, 하나의 값)이어야 합니다. 이는 테이블의 칼럼이 원자값을 갖도록 테이블을 분해하는 것을 의미합니다.

수강과목수강자수강과목수강자1수강자2수강자3
수학홍길동국어홍길동
과학임꺽정, 신사임당수학신사임당홍길동
사회홍길동, 임꺽정영어고길동신사임당홍길동

수강자 속성이 원자값이 아님
유사한 속성이ㅣ 중복, 반복되는 경우도 정규화의 대상

발생할 수 있는 이상(Anomaly)의 예

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

1NF를 만족하도록 릴레이션 교정

수강과목수강자일련번호
수학홍길동1
과학임꺽정2
과학신사임당3
사회홍길동4
사회임꺽정5

가장 간단한 방법은 원자값으로 분해 후 튜플로 구분하고 다른 키를 추가하는 것
실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들을 야기할 수 있기에 테이블 구조를 따져봐야 한다

2NF (Second Normal Form)

2NF를 만족하려면 부분적 함수 종속을 제거해야 합니다. 이는 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것을 의미합니다. 이때 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것입니다.

학번이름소속학과학과장
1901홍길동컴퓨터과김교수
1845임꺽정전자과박교수
1706신사임당기계과천교수
1925장영실컴퓨터과김교수
  • 학번 <-> 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)
  • 하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
  • 즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.

발생할 수 있는 이상(Anomaly)의 예

  • 삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.
  • 갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
  • 삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.

2NF를 만족하도록 릴레이션 교정

학번이름소속학과
1901홍길동컴퓨터과
1845임꺽정전자과
1706신사임당기계과
1925장영실컴퓨터과
학과학과장
컴퓨터과김교수
전자과박교수
기계과천교수

3NF (Third Normal Form)

3NF를 만족하려면 이행적 함수 종속을 제거해야 합니다. 이는 제2 정규화를 진행한 테이블에 대해 이행적 종속을 업애도록 테이블을 분해하는 것을 의미합니다. 이 때 이행적 종속이란 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미합니다.

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

발생할 수 있는 이상(Anomaly)의 예

  • 삽입이상: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
  • 갱신이상: 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
  • 삭제이상: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.

3NF를 만족하도록 릴레이션 교정

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

BCNF (Boyce and Codd Normal Form)

BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 합니다. 이는 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 됟도록 테이블을 분해하는 것을 의미합니다.

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

제약사항

  • 한 학생은 동일한 과목에 대해 한교수에게만 수강가능
  • 각 교수는 하나의 과목만 담당
  • 한 과목은 여러 교수가 담당가능

분석

  • (학번 + 과목)은 교수를 결정 짓는다.
  • 교수는 과목을 결정 짓는다.
  • 즉, 교수 또한 결정자인데 교수는 학번을 결정 지을 수 없으므로 후보키는 아니다.

발생할 수 있는 이상(Anomaly)의 예

  • 삽입이상: 200학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
  • 갱신이상: 홍길동의 담당 과목이 알고리즘으로 바뀌었다. 담당 과목을 변경할 경우, 학생의 수강 과목이 변경되어 버린다.
  • 삭제이상: 300학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.

BCNF를 만족하도록 릴레이션 교정

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

0개의 댓글