aajin126's devlog

[Database] 릴레이션 정규화 본문

Computer Science/Database

[Database] 릴레이션 정규화

aajin126 2023. 5. 24. 10:06

릴레이션 정규화

  • 데이터베이스에 어떤 릴레이션들을 생성할 것인가? 각 릴레이션에 어떤 애트리뷰트들을 둘 것인가?
  • 정규화(normalization)는 주어진 릴레이션 스키마를 함수적 종속성기본키를 기반으로 분석하여, 원래의 릴레이션을 분해함으로써 중복세 가지 갱신 이상최소화한다.

👉 좋은 관계 데이터베이스 스키마를 설계하는 목적 :

정보의 중복과 갱신 이상, 손실을 막고, 애트리뷰트 간의 관계가 잘 표현되는 것을 보장하며, 무결성 제약조건의 시행을 간단하게 하며, 효율성도 고려하는 것을 목적으로 한다.

 

갱신 이상(update anomaly)

수정 이상 (modification anomaly)

    • 반복된 데이터 중 일부만 수정하면 데이터 간의 불일치가 발생

삽입 이상 (insertion anomaly)

  • 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능

삭제 이상 (deletion anomaly)

  • 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능

릴레이션 예시

  • 정보의 중복
    • 각 사원이 속한 부서 수만큼 동일한 사원의 투플이 존재 → 부서 제외 나머지 정보 중복
  • 수정 이상
    • 어떤 부서 이름이 바뀔 때 일부 사원 투플에서만 부서 이름을 변경하면 불일치 상태
  • 삽입 이상
    • 부서를 신설했는데, 사원이 배정이 안됐다면 부서에 관한 정보를 입력할 수 없음
  • 삭제 이상
    • 어떤 부서에 사원이 단 한 명 있을 때, 그 사원의 투플을 삭제하면 그 사원이 속한 부서에 관한 정보도 삭제됨.

릴레이션의 분해

  • 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
  • 분해된 릴레이션들로부터 원래의 릴레이션을 다시 구할 수 있음을 보장해야함
  • 분해는 함수적 종속성을 기반으로 함

릴레이션 분해

  • 수정, 삽입, 삭제 이상이 나타나지 않음

정규형의 종류

  • 제 1정규형(first normal form)
  • 제 2정규형(second normal form)
  • 제 3정규형(third normal form)
  • BCNF (Boyce-Codd normal form) → 보통 이 단계까지 고려
  • 제 4정규형
  • 제 5정규형

관계 데이터베이스 설계의 비공식적인 지침

  1. 이해하기 쉽고 명확한 스키마를 만들어라 (여러 엔티티 타입이나 관계 타입에 속한 애트리뷰트를 하나의 릴레이션에 포함시키지 않는다)
  2. 널값을 피해라
  3. 가짜 투플이 생기지 않도록 해라
  4. 스키마를 정제해라

함수적 종속성

  • 정규화 이론의 핵심
  • 애트리뷰트들의 의미로부터 결정된다.
  • 릴레이션 스키마에 대한 주장이지, 릴레이션의 특정 인스턴스에 대한 주장이 아니다. (릴레이션의 모든 인스턴스가 만족해야 하긴 함)
  • 함수적 종속성은 제 2정규형 ~ BCNF 까지 적용된다.

결정자

  • 어떤 애트리뷰트 값은 다른 애트리뷰트의 값을 고유하게 결정할 수 있다.
  • 결정자는 주어진 릴레이션에서 다른 애트리뷰트를 고유하게 결정하는 하나 이상의 애트리뷰트를 의미한다.
  • A → B : A가 B를 결정한다. (A는 B의 결정자이다)

함수적 종속성

  • 만일 애트리뷰트 A가 애트리뷰트 B의 결정자이면 B가 A에 함수적으로 종속한다고 말한다.
  • A → B이려면, 각 A 값에 대해 반드시 한 개의 B 값이 대응되어야 한다.

  • 사원 번호는 (사원 이름, 주소, 전화번호)의 결정자, (사원 이름, 주소, 전화번호)는 사원 번호에 함수적으로 종속된다.
  • 직책은 (사원번호, 부서번호)에 함수적으로 종속하지, 사원 번호에만 함수적으로 종속하지는 않는다.

완전 함수적 종속성(FFD : Full Functional Dependency)

B가 A에 함수적으로 종속하면서 A의 어떠한 진부분 집합에도 함수적으로 종속하지 않으면 B가 A에 완전하게 함수적으로 종속한다고 한다.

  • A를 (사원번호, 부서번호)라고 할 때, 직책은 A에 완전하게 함수적으로 종속하지만 (사원이름, 주소, 전화번호)는 부분 함수적 종속성을 나타낸다.

이행적 함수적 종속성 (transitive FD)

  • 기본키를 제외하고 애트리뷰트가 2개 이상 있어야 함
  • 한 릴레이션의 애트리뷰트 A, B, C가 있을 때 C가 이행적으로 A에 종속(A → C)한다는 것의 필요 충분 조건은 : A → B ^ B → C 가 성립하는 것

  • A가 기본키이기 때문에 A → B, A → C 가 성립한다.
  • 이 때 , B → C가 성립하기 때문에 C는 A에 직접 함수적으로 종속하면서 B를 거쳐서 A에 이행적으로 종속한다.

릴레이션 분해

  • 중복이 감소되고 갱신 이상이 줄어드는 장점이 있지만 분해 후 조인을 필요로 하는 질의로 바뀐다든지, 분해된 릴레이션을 사용하여 원래 릴레이션을 재구성 하지 못하는 잠재적 문제를 야기할 수 있다.

무손실 분해(lossless decomposition)

  • 분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어있는 정보를 완전하게 얻을 수 있다.

불필요한 분해

  • 분해를 할 필요가 없는데, 분해하여 data가 중복되게 하는 것

나쁜 분해

  • 조인했을 때 원래 릴레이션이 나오지 않는 분해

가짜 투플

  • 나쁜 분해 후 조인했을 때 원래 릴레이션에는 없던 투플

정규형

제 1정규형

릴레이션 R의 모든 애트리뷰트가 원자값만을 가지는 것이 R이 제 1정규형을 만족하는 필요 충분 조건이다.

  • 즉 모든 애트리뷰트에 반복 그룹(repeating group)이 나타나지 않으면 된다.

제 1정규형으로 변환하는 방법

  • 반복 그룹 애트리뷰트에 나타나는 집합에 속한 값마다 하나의 투플로 표현
  • 반복 그룹 애트리뷰트를 분해하여 원래 릴레이션의 기본키를 가진 새로운 릴레이션에 넣어준다.

제 1정규형에 존재하는 갱신 이상

  • 삭제 이상 : 어떤 학과에 소속된 마지막 학생 투플을 삭제하면 이 학생이 소속된 학과에 관한 정보도 삭제될 때
  • 수정 이상 : 학과에 소속된 학생 수만큼 그 학과의 전화번호가 중복되어 저장되어 있으므로, 여러 학생이 소속된 학과의 전화번호가 변경되었을 때, 모든 학생 투플의 전화번호를 수정하지 않으면 일관성이 유지되지 않는다.
  • 삽입 이상 : 한 명의 학생이라도 어떤 학과에 소속되어 있지 않으면 이 학과에 관한 투플을 삽입할 수 없다.

→ 갱신 이상이 생기는 이유 : 기본 키에 대한 부분 함수적 종속성이 존재하기 때문

제 2정규형

릴레이션 R이 제 1정규형을 만족하면서, 어떤 후보 키에도 속하지 않는 모든 애트리뷰트들이 R의 기본 키에 완전하게 함수적으로 종속하는 것

  • 기본 키가 두 개 이상의 애트리뷰트로 구성되었을 때만 제 2정규형을 만족하는가를 고려할 필요가 있다. (기본키가 1개면 무조건 만족한다.)

제 2정규형에 존재하는 갱신 이상

  • 수정 이상 : 여러 학생이 소속된 학과의 전화번호가 변경되었을 때, 모든 학생 투플의 전화번호를 수정하지 않으면 일관성이 유지되지 않는다.
  • 삽입 이상 : 한 명의 학생이라도 어떤 학과에 소속되어 있지 않으면 이 학과에 관한 투플을 삽입할 수 없다.
  • 삭제 이상 : 어떤 학과에 소속된 마지막 학생 투플을 삭제하면 이 학생이 소속된 학과의 전화번호도 함께 삭제됨

→ 갱신 이상이 생기는 이유 : 이행적 종속성이 존재하기 때문

  • 학번(기본키) → 학과이름, 학번 → 학과전화번호 일 때 학과이름 → 학과전화번호 이므로 이행적 종속성이 존재한다.

제 3정규형

릴레이션 R이 제 2정규형을 만족하면서, 키가 아닌 모든 애트리뷰트가 R의 기본 키에 이행적으로 종속하지 않는 것 (기본키를 제외하고 애트리뷰트가 2개 이상 있어야 가능.. )

제 3정규형에 존재하는 갱신 이상

각 학생은 여러 과목을 수강할 수 있고, 각 강사는 한 과목만 가르친다. 기본키 (학번, 과목)

키가 아닌 강사 애트리뷰트가 기본키에 완전하게 함수적으로 종속하므로 제 2정규형을 만족하고, 기본 키에 직접 종속하므로 제 3정규형도 만족한다.

  • 수정 이상 : 여러 학생이 수강 중인 어떤 과목의 강사가 변경되었을 때 모든 학생 투플에서 강사를 수정하지 않으면 일관성이 유지되지 않는다.
  • 삽입 이상 : 신설 과목의 수강 학생이 없으면 어떤 강사가 그 과목을 가르친다는 정보를 입력할 수 없다.
  • 삭제 이상 : 어떤 과목의 유일한 학생 투플을 삭제하면 그 과목을 가르치는 강사 정보도 삭제된다.

→ 갱신 이상이 생기는 이유 : 수강 릴레이션이 키가 아닌 애트리뷰트가 다른 애트리뷰트를 결정하기 때문이다. 이 R의 후보 키는 (학번, 과목) or (학번, 강사) → 강사가 과목을 정해버림

BCNF

한 릴레이션 R이 BCNF를 만족할 필요 충분 조건은 릴레이션 R이 제 3정규형을 만족하고, 모든 결정자가 후보키여야 한다.

  • 위의 표는 제 3정규형을 만족하지만 강사 애트리뷰트는 후보 키가 아님에도 불구하고 과목 애트리뷰트를 결정하기 때문에 BCNF를 만족하지 않는다.

키가 아니면서 결정자 역할을 하는 애트리뷰트(C)그 결정자에 함수적으로 종속하는 애트리뷰트(B)를 하나의 테이블에 넣음. 이 릴레이션에서 결정자(C)는 기본 키가 된다.

역정규화(denormalization)

정규화 단계가 진행될수록 중복이 감소하고 갱신 이상도 감소된다. 하지만 성능상의 관점에서 높은 정규형을 만족하는 릴레이션 스키마가 최적인 것은 아니다. 분해된 릴레이션을 대상으로 질의를 할 때는 같은 정보를 얻기 위해서 보다 많은 릴레이션들을 접근해야 하므로 조인의 필요성이 증가하기 때문이다.

  • 데이터베이스 설계자는 요구 사항에 따라 일부를 역정규화하여 데이터 중복 및 갱신 이상을 대가로 치르면서 성능상의 요구를 만족시키기도 한다.
  • 많은 데이터베이스에서 검색 질의 >> 갱신 질의 이다. 역정규화는 주어진 응용에서 빈번하게 수행되는 검색 질의들의 수행 속도를 높이기 위해서 이미 분해된 두개 이상의 릴레이션들을 합쳐서 하나의 릴레이션으로 만드는 작업이다.

역정규화

'Computer Science > Database' 카테고리의 다른 글

[Database] 트랜잭션  (0) 2023.05.31
[Database] 데이터베이스 설계와 ER 모델(1)  (0) 2023.04.14
[Database] SQL(3)  (0) 2023.04.14
[Database]SQL(2)  (0) 2023.04.14
[Database] SQL(1)  (0) 2023.04.10
Comments