데이터베이스 정규화 (Nomalization), 정규화 과정, SQL Key

김가람휘·2022년 2월 2일
3

CS

목록 보기
4/15

1. 정규화(Nomalization)

  • Attribute 간의 종속성으로 인한 이상현상이 발생하는 릴레이션을 분해하여 재디자인함으로써 이상현상을 없애는 과정
  • 데이터의 중복 방지, 무결성을 충족하기 위해 데이터베이스를 설계하는 방법
  • 각종 이상 현상들을 해결할 수 있다.

    삽입 이상(insertion anomaly)
    원하지 않는 자료가 삽입된다든지, key가 없어 삽입하지 못하는(불필요한 데이터를 추가해야 삽입할 수 있음)문제점
    삭제 이상(deletion anomaly)
    하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점
    갱신 이상(update anomaly)
    일부만 변경하여 데이터가 불일치하는 모순, 또는 중복되는 튜플이 존재하게 되는 문제점

  • 새로운 속성의 추가로 인해 DB 구조를 확장하는 경우, 구조의 변경을 최소화할 수 있다. -> 응용프로그램의 생명 연장
  • 정규화된 릴레이션 간의 관계가 현실 세계에서의 개념들간의 관계를 잘 보여준다.
  • 반면, 릴레이션의 분해로 인해 릴레이션간의 연산이 많아져 응답 시간이 오히려 느려질 수도 있다.
    -> 반정규화를 통해 성능을 향상시킬 수 있다.

반정규화(De-Normalization)

  • 시스템의 성능 향상을 위해 정규화된 데이터 모델을 통합하는 작업으로, 의도적으로 정규화 원칙을 위배하는 행위이다.
  • 테이블 통합/분할/추가, 중복 속성 추가 등이 있다.
  • 테이블이 단순해지고 관리 효율성이 증가하지만, 데이터의 일관성이나 무결성이 보장되지 않을 수 있다.
    -> 데이터의 중복 방지, 무결성 vs 데이터베이스 성능, 단순화

함수 종속성(Functional Dependency)

  • 어떤 테이블의 속성 A와 B에 대하여, A값에 의해 B값이 유일하게 정해지는 관계를 말하며 B는 A에 함수 종속이다 라고 한다.
  • A->B 이때, A를 결정자(Determinant)라고 하고, B를 종속자(Dependant)라고 한다.

    완전 함수 종속
    기본키를 구성하는 모든 속성에 종속되는 경우
    부분 함수 종속
    기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
    이행적 함수 종속
    A, B, C 세 속성이 있고 A->B, B->C 종속 관계가 있을 때, A->C가 성립하는 경우

    학년과 이름은 기본키인 (학번, 과목번호)에 대해 부분 함수 종속이고, 성적은 완전 함수 종속이다.

SQL

  • 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
    • 키(Key)
      데이터베이스에서 조건에 만족하는 관계의 행을 찾거나 순서대로 정렬할 때 다른 행과 구별할 수 있는 유리한 기준이 되는 속성의 집합이다.

    • 슈퍼키(Super Key)
      • 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다.
      • 유일성을 만족한다.
    • 후보키(Candidate Key)
      • 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다.
      • 유일성과 최소성을 동시에 만족한다.
    • 기본키(Primary Key)
      • 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
      • 테이블에서 기본키는 오직 1개이다
      • 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없다.

    • 대체키(Alternate Key)
      • 후보키가 두개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라고 한다.
      • 대체키는 기본키로 선정되지 않은 후보키이다.

    • 외래키(Foreign Key)
      • 테이블이 다른 테이블의 데이터를 참조하여 테이블간의 관계를 연결하는 것이다.
      • 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 주는 것이다.
      • 참조 될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.
      • 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야 한다.
      • 외래키는 참조되는 테이블의 기본키와 동일한 키 속성을 가진다.
      • 참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야 된다.
      • 부모 테이블이 먼저 삭제될 수 없다. -> 외래키 오류

        학생 Table -> 부모 테이블, 학번이 기본키이자 참조되는 참조키
        수강 Table -> 자식 테이블, 학번이 참조하는 키이자 외래키

2. 정규화 과정

제1 정규형 (1NF)

  • 제1 정규형은 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다.

  • 제1 정규형이 되려면 다음과 같이 속성 값을 분리해주어야 한다.

  • 기본키(Primary key)가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분 함수 종속되어 있기 때문에 이상현상이 발생한다.

    • 삽입 이상 : 학생이 새 과목을 수강 신청할 때 반드시 학생의 학과와 지도교수를 알아야 한다. (불필요한 정보)
    • 삭제 이상 : 300번 학생이 C400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라진다.
    • 갱신 이상 : 100번 학생이 지도교수를 변경할 때, P1인 행을 모두 찾아서 변경해주어야 한다.

제2 정규화 (2NF)

  • 제2 정규형은 제1 정규형이면서, 기본키(Primary key)에 속하지 않은 속성 모두가 기본키에 완전 함수 종속인 정규형을 말한다.
  • 각 속성들이 모두 완전 함수 종속이 되도록 릴레이션을 분리시켜준다.
  • 학번->지도교수, 지도교수->학과, 학번->학과의 관계가 존재하여 이행적 함수 종속성 때문에 제2 정규형에도 여전히 이상현상이 발생한다.
    • 삽입 이상 : 지도교수가 학과에 소속되어 있음을 추가할 때 반드시 지도 학생이 있어야 한다. (불필요한 정보 필요)
    • 삭제 이상 : 300번 학생이 자퇴하는 경우 P3 교수의 학과 정보가 사라진다.
    • 갱신 이상 : 지도교수의 학과가 변경되는 경우 모두 찾아서 변경시켜주어야 한다. (지도교수가 동일한 학생이 여러 명 있는 경우)

제3 정규형 (3NF)

  • 제3 정규형은 제2 정규형이면서, 이행적 함수 종속성을 제거한 정규형을 말한다.
    -> 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때

BCNF (Boyce and Codd Normal Form)

  • BCNF는 제3 정규형이면서, 결정자이면서 후보키가 아닌 것을 제거한 정규형을 말한다.

  • 위는 제3 정규형을 만족하지만 이상현상이 발생할 수 있다.

    • 삽입 이상 : 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가할 수 없다. 적어도 한 명 이상의 수강 학생이 필요하다.
    • 삭제 이상 : 학번 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.
    • 갱신 이상 : P1의 과목이 변경되면 P1인 행을 모두 찾아 변경시켜주어야 한다.
  • 따라서 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해해주면 BCNF를 만족한다.

제4 정규형 (4NF)

  • BCNF이면서 다치 종속을 제거한 정규형을 말한다.

제5 정규형 (5NF)

  • 제4 정규형이면서, 조인 종속성을 이용한 정규형을 말한다.

0개의 댓글