본문 바로가기

CS

[DB] DB 정규화란?

데이터베이스 정규화


db정규화란?

  • 관계형 데이터베이스에서 데이터를 재설계, 구조화하는 작업
  • 정규형이란 특정 조건을 만족하는 realation의 스키마의 형태를 말하며 제 1 정규형, 제 2 정규형, 제 3 정규형 등이 존재한다.
  • 보통 속성들 사이와 관계를 분석해 여러개의 릴레이션으로 분할하느 과정을 거치므로 이상현상은 줄어드나 속도가 느려짐.

정규화는 왜 필요한가?

  • db 구조가 복잡해질수록 생길 수 있는 중복 저장되며, 저장 공간을 낭비 등을 해결한다.
  • 또한 삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상(Anamolies)들을 방지할 수 있습니다.
  • 따라서 정규화의 목적은 불필요한 데이터를 제거하고 '논리적'으로 데이터를 저장한다는 것에 있다.

각종 이상현상에는 어떠한 것들이 있는가?

  1. 삽입 이상(insertion anomalies): 원하지 않는 자료가 삽입되는 경우, 삽입이 되지 않는 경우 등
  2. 삭제 이상(deletion anomalies): 하나의 자료만 삭제하려 할 때 튜플 전체가 삭제되는 등 원치않는 정보까지 연속적으로 삭제되는 경우 등
  3. 수정(갱신)이상(modification anomalies): 일부의 데이터만 수정되어 일관성이 없어져(inconsistency)나타나는 문제 등

함수적 종속성이란 무엇인가?

  • X 와 Y 를 임의의 attribute 집합이라고 할 때, X 의 값이 Y 의 값을 유일하게(unique) 결정한다면 "X 는 Y 를 함수적으로 결정한다"라고 한다.(X -> Y)
  • FD, trivial fd, closure of fd 등

정규화 종류


각 정규형은 그의 선행 정규형보다 더 엄격한 조건을 갖는다

제 1 정규형

  • 모든 attribute의 도메인들이 atomic(더이상 쪼갤 수 없는) 해야한다. 즉 각 행마다 열에 해당하는 값이 하나만 있어야 한다.

제 2 정규형

  • 테이블의 모든 attribute가 완전 함수적 종속을 만족하는 것.
  • 완전 함수적 종속이란 X -> Y 라고 가정했을 때, X 의 어떠한 attribute라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우
  • 즉 부분 함수 종속을 제거하는 것

제 3 정규형

  • 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것
  • 이행 함수적 종속이란 X - >Y, Y -> Z의 경우에 의해서 추론될 수 있는 X -> Z의 종속관계
  • 즉, 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것

BCNF(Boyce and Codd Normal Form)

  • 제 3 정규형을 보완
  • 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형(즉 결정자 중 후보키가 아닌 경우 제거)
  • 일반 컬럼이 후보키를 결정하는 경우(3차 정규형 만족, BCNF 불만족)

정규화 장점

  • 데이터베이스 변경 시 이상 현상(Anomaly) 문제 해결
  • 데이터베이스 구조 확장 시 용이

정규화 단점

  • relation 간의 연산(JOIN 연산)이 많아져 질의에 대한 응답 시간이 느려질 수 있다.

데이터베이스 역정규화(denormalization)와 NoSQL

  • 관계형 데이터베이스 Join 연산은 시스템이 커질수록 느려지는 단점이 있어 역정규화를 통해 해결
  • 역정규화란 데이터베이스에 여분의 정보를 추가해 읽기 연산 속도를 향상시킨 것
    (= 두 테이블을 조인하기 보다 애초에 필요한 정보를 추가로 저장해 놓음)
  • 즉 분할했던 릴레이션을 다시 통합하거나 다른 기준으로 분할하여 구조를 재조정하는 것
  • 검색 빈도에 의하여 튜플이나 속성을 분할하기도 함
  • NoSQL은 Join 연산을 지원하지 않고 규모확장성이 좋음

기타 개념

  • 키의 종류 및 구분- 수퍼키, 후보키 등
  • 릴레이션(relation) model : 모든 정보를 표 형태의(행과 열로 구성된 테이블) 관계로 표현
  • 스키마(schema) : 구조, 릴레이션이 어떤 attribute를 가지는지 등
  • 인스턴스(instance) : 정의된 스키마에 따라 실제로 저장되는 데이터의 집합
  • 속성(attribute) : relation 스키마의 열
  • 도메인(domain) : 각 attribute가 취할 수 있는 value, 값의 집합
  • 튜플(tuple) : relation의 행(row)
이해를 위한 참고 사이트 링크