[데이터베이스] 정규화

meek·2023년 6월 20일
0

TIL

목록 보기
20/24
post-thumbnail

테이블(Table)

  • 하나의 데이터베이스는 여러 개의 테이블을 가진다.
  • 하나의 테이블은 엑셀 시트와 유사한 형태를 보인다.
  • 테이블 내 각 데이터는 행(row)와 열(column)이 만나는 지점에 데이터가 들어간다.
  • 행(row) = 레코드(record) = 튜플(tuple)
  • 열(column) = 필드(field) = 속성(attribute)

데이터베이스 정규화(Normalization)

  • 데이터의 중복을 최소화하고 데이터의 일관성을 최대화한다.
  • 일반적으로 데이터를 분해하는 과정으로 이해할 수 있다.
  • 이상현상(Anomaly) 을 방지한다.

이상현상(Anomaly)?

  • 삽입 이상 : 데이터를 삽입할 때 의도와 상관없는 데이터도 함께 삽입되는 문제
  • 삭제 이상 : 데이터를 삭제할 때 의도와 상관없는 데이터도 함께 삭제되는 문제
  • 수정 이상 : 데이터를 수정할 때 의도와 상관없는 데이터도 함께 수정되는 문제

제 1정규화(1NF)

  • 제 1정규화 방법 : 속성(attribute)의 원자성을 확보한다.
  • 정규화가 수행되지 않은 테이블 예시를 확인해 보자
  • 1번 학생의 경우 속성 값으로 2개의 값을 가진다.(여러 강의 수강) -> 원자성X
학번(학생 번호)강의
1컴퓨터 공학 개론, 알고리즘
2핵융합
3기계 공학 개론
4광학 이론
5컴퓨터 공학 개론, 알고리즘, 컴퓨터 구조

👇🏻 제 1정규화를 진행했을 경우

학번(학생 번호)강의
1컴퓨터 공학 개론
1알고리즘
2핵융합
3기계 공학 이론
4광학 이론
5컴퓨터 공학 개론
5알고리즘
5컴퓨터 구조

학번이 여러번 등장하지만, 강의명은 한번씩 등장하므로 정규화가 적용된 것이 맞음

제 2정규화(2NF)

  • 위의 제 1정규화를 만족하지만, 다양한 이상 현상이 존재할 수 있다.
  • 삽입 이상 : 강의를 하나도 수강하지 않은 학생은 삽입 자체가 불가능
  • 삭제 이상 : 과목의 강의 정보가 삭제(폐강)되면 해당 학생에 대한 정보도 삭제된다.

👉🏻 이 문제를 해결하기 위해 제 2정규화 적용

제 2정규화(2NF)

  • 키에 속하지 않는 속성들은 기본 키에 완전 함수 종속이도록 한다.

  • 완전 함수 종속 : 기본키의 부분 집합이 결정자가 되면 안 된다는 것을 의미한다.

  • 현재 기본키인 (학번, 강의)가 성적을 결정하고, 학과도 결정한다.
    👉🏻 단, "강의"만 보았을 때도 학과를 결정하는 문제가 있다.
    👉🏻 또한, "학번"만 보았을 때도 지도 교수를 결정하는 문제가 있다.

👉🏻 해결 방법 : 현재 테이블을 소속 테이블수강 테이블로 쪼개어 해결할 수 있다.
🥟 참고 사항 : 기본적으로 기본키가 1개의 속성으로만 구성되어 있다면, 자동으로 제2정규화는 만족하므로, 제 2정규화 과정을 생략할 수 있다.

제 3정규화(3NF)

  • 이행적 종속을 제거하여 만족시킬 수 있다.

이행적 종속

  • A->B->C가 성립할 때, A ->C가 성립하는 것
  • 기본키가 아닌 속성이 결정자가 아니도록 하면 해결된다. 👉🏻 별도의 테이블로 분해
profile
hello, world!

0개의 댓글