책/MySQL로 배우는 데이터베이스 개론과 실습

MySQL로 배우는 데이터베이스 개론과 실습 (4)

atmosg 2025. 1. 19. 12:25

 

32. 이상현상

# 이상현상(anomaly) 이란

  • 테이블의 일관성을 훼손해 데이터 무결성을 깨뜨리는 현상
  • 주요 이상현상
    • 삽입 시 : 튜플 삽입 시 의도치 않은 NULL 값이 입력됨, 중복 데이터 삽입 등
    • 삭제 시 : 튜플 삭제 시 필요 데이터까지 함께 삭제돼는 연쇄삭제 등
    • 수정 시 : 튜플 수정 시 테이블 속성 일관성 깨짐 등
  • 이상현상 예시
더보기

■ 삽입이상 : 튜플 삽입 시 특정 속성에 값이 없어 NULL을 입력해야 하는 현상

 

 

■ 삭제이상 : 튜플 삭제 시 저장된 다른 정보까지 연쇄적으로 삭제되는 현상

 

 

 

 

■ 수정이상 : 튜플 수정 시 중복된 데이터중 일부만 수정돼 데이터 불일치가 일어나는 현상

 

 

 

 

 

33. 함수 종속성

# 정규화

  • 이상현상이 있는 테이블을 수정해 문제를 해결하는 과정을 말함
  • 즉, DB 설계상 데이터의 중복을 최소화하고 무결성을 유지시키는 정리 활동
  • 정규화를 하려면 테이블 분석을 위한 함수 종속성을 파악할 줄 알아야함
  • 참고로 정규화에 너무 매몰되면 테이블이 지나치게 세분화돼서 조인도 많아지고 성능도 떨어짐

 

# 함수 종속성(FD; Functional Dependency)

  • 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 결정되는 관계를 말함
    • 이러한 관계를 '속성 B는 속성 A에 종속한다 (dependent)'
    • 혹은 '속성 A는 속성 B를 결정한다 (determine)' 라고 표현 함
    • 이러한 경우 A는 B의 결정자(determinant), B는 종속자(dependent)라고 하며, 'A → B' 라고 표기함
  • 함수 종속성 판단은 속성이 갖는 의미를 갖고 판단해야함
  • 즉, 단순 릴레이션 내 인스턴스(데이터) 만으로 판단하면 안됨

 

 

# 함수 종속성 다이어그램(functional dependency diagram)

  • 함수 종속성을 시각적으로 표현한 다이어그램
  • 노드(각 속성)와 화살표로 구성됨
  • 위 테이블에서 함수 종속성과 함수 종속성 다이어그램으로 나타낸 것

결정자가 복합 속성일 수도 있음!!! (복합속성은 직사각형으로 묶어서 표현함)

 

 

# 함수 종속성 규칙

  • 함수 종속성 분석과 이해를 위해 정의된 규칙임
  • 1974년 윌리엄 암스트롱이 연구해서 암스트롱의 공리 라고도 함
  • 주요 규칙
    • 부분집합(subset)규칙 : 일 때, 가 성립. 즉, 속성 집합 X가 속성 집합 Y를 포함하고 있다면, XY를 결정함
    • 증가(augmentation) 규칙 : X→Y일 때,  XZ→YZ가 성립 (Z는 속성 집합). 즉, 함수 종속 관계가 성립하면, 양쪽에 동일한 속성을 추가해도 여전히 종속 관계가 유지됨
    • 이행(transitivity) 규칙 : 이고 일 때, 가 성립됨
  • 추가 규칙 (주요 규칙에서 추론되는 규칙) 
    • 결합(union) 규칙 : X→Y이고 X→Z일 때, X→YZ가 성립
    • 분해(decomposition) 규칙 : X→YZ일 때, X→Y와 X→Z가 성립
    • 유사이행(pseudotransitivity) 규칙 : X→Y이고 WY→Z일 때, WX→Z가 성립

 

 

# 함수 종속성과 기본키

  • 함수 종속성 파악을 하렴녀 가장먼저 기본키를 찾아야됨
  • 그 이유는 기본키란거 자체가 릴레이션 내에 오직 하나의 값만 존재하기 때문
    • 까먹었겠지만 이를 개체 무결성 제약조건 (혹은 기본키 제약조건)이라고 함
    • 애초에 기본키 자체가 이 제약조건을 달고 나오기 때문에 중요한거임
    • 예를 들어 R(K,A,B,C) 릴레이션이 있을때 (k1,a1, ...), (k1, a2,...) 같은 케이스가 존재하지 않음
  • 이에따라 K→A, K→B, K→C 이고, 결합규칙에 따라 K→ KABC ... K → R 이 성립함
  • 즉, 기본키 속성이 릴레이션 전체의 결정자

 

 

# 이상현상과 결정자

  • 이상현상은 한 개의 릴레이션에 두 개 이상의 정보가 포함될 때 발생함
  • 그리고 결정적으로, 기본키(후보키)가 아니면서 결정자인 속성(비후보키 결정자 속성)이 있을 때 발생함
  • 이러한 속성들을 중심으로 릴레이션을 분해하면 이상현상을 없앨 수 있음
  • 말만 들으면 굉장히 어려운데, 아래 예시를 보면 이해가 갈거임
더보기

1. 결정자 찾기

 

  • (학생번호, 강좌이름) : 기본키이면서 전체 릴레이션의 결정자
  • 학과 : 기본키가 아니면서 부분 릴레이션 R1(학과, 학과사무실)의 결정자
  • 학생번호 : 기본키가 아니면서 부분 릴레이션 R2(학생번호, 학생이름, 학과, 주소)의 결정자
  • 강좌이름 : 기본키가 아니면서 부분 릴레이션 R3(강좌이름, 강의실)의 결정자 

 

 

2. 분해하기

 

 

 

34. 정규화

# 정규화와 정규형

  • 정규화 : 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
  • 정규형 : 이상현상을 일으키는 함수 종속성의 유형에 따라 등급으로 구분해놓은 것
    • 교통수단 안전도 등급 구분이랑 비슷함
    • 오토바이(1등급), 자동차(2등급), 기차(3등급), 비행기(4등급)
  • 정규형은 총 4가지가 있으며, 등급이 높을수록 이상현상이 줄어드는 구조
  • 근데 솔직히 정규형은 직관적으로 받아들이기 어려우니까 예제를 보고 마음으로 느껴라


# 제1 정규형 (1NF, First Normal Form)

  • 릴레이션 R의 모든 속성값이 원자값을 가지는 상태
    A relation in which the intersection of each row and column contains one and only one value
  • 쉽게 말해 각 칸(셀)에 한 개의 값만 저장되어야 한다는 의미임
  • 즉, 칸 안에 여러 값을 넣으면 안 됨
    학생번호 학생명 전화번호
    1 Alice 123-4567, 234-5678
    2 Bob 345-6789
    학생번호 학생명 전화번호
    1 Alice 123-4567
    1 Alice 234-5678
    2 Bob 345-6789
    → 간단하게 해결 가능


# 제2 정규형 (2NF, Second Normal Form)

  • 릴레이션 R이 제1 정규형이고, 기본키가 아닌 속성이 기본키에 *완전 함수 종속인 상태
    A relation that is in first normal form and every non-primary key attribute is fully functionally dependent on the primary key
  • 좀더 쉽게 풀어쓰자면 *부분 함수 종속이 제거된 상태를 말함
  • 그냥 예시를 보는게 훨씬 이해하기 쉬움
    • 기본 키가 (학생번호, 강좌번호)라고 해보자
    • 근데 강좌명은 강좌번호에만 종속되고, 학생번호와는 전혀 관계가 없음
    • 이처럼 기본키의 일부에만 의존하는 속성이 존재하는 상태를 부분 함수 종속이라고 함

      학생번호 강좌번호 강좌명 성적
      1 101 수학 3.5
      1 102 과학 3.7

      해결방법은 함수 종속성을 분석하여 이상현상을 일으키는 테이블을 분해하면 해결됨

 

 

# 완전/부분 함수 종속

  • 릴레이션 R의 속성 A, B에 대하여 A → B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분집합 속성에 함수 종속하지 않을 경우 완전 함수 종속(full functional dependency)라고 함
  • 말이 어려운데, 어떤 속성이 기본키(단일 속성이든 복합 속성이든)에 의해서만 종속되는 상태를 말함
  • 이 반대를 부분 함수 종속, 혹은 불완전 함수 종속이라고 함
  • 예를 들어, (A1, A2) → B 인 와중에 A1 → B 도 여전히 성립하는 경우임
  • 여하튼 이 부분 함수 종속때문에 이상현상이 발생하고, 이를 수정하면 2NF 상태가 됨


# 제3 정규형 (3NF, Third Normal Form)

  • 릴레이션 R이 제2 정규형이고, 비기본 속성 Y가 기본키에 이행적으로 종속되지 않는 상태
    A relation that is in first and second normal form and witch no non-primary key is transitively dependent on the primary key
  • 또 말이 어려운데, 쉽게말해 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되지 않는다는 말
  • 기억 안날까봐 적어두자면 이행적 종속이란 A → B, B → C가 성맇발 때 A → C가 성립되는 함수 종속성을 말함
  • 역시나 예시를 보는게 훨씬 이해하기 쉬움
    • 부서장은 부서에 종속되고, 부서는 부서번호에 종속됨 (A→B, B→C 상태)
    • 즉, 부서장은 부서번호에 종속됨 (결국 A→C 상태가 됨)
    • 이 역시도 해결방법은 함수 종속성을 분석하여 테이블을 분해하면 해결됨

      부서번호 부서 부서장
      1 HR Alice
      2 IT Bob
      간단

 

 

# BCNF 정규형 (Boyce Codd Normal Form)

  • 릴레이션 R에서 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키인 상태
    A relation is in BCNF if and only if every deteminant is a candidate key
  • 쉽게말해 결정자인데 후보키가 아닌 속성이 존재하지 말아야 된다는 얘기
  • 기억 안날까봐 적자면 후보키는 튜플을 유일하게 식별할 수 있는 속성의 최소 집합
  • 또또 예시를 보는게 훨씬 쉬움
    • 후보키 판별 : (학생번호, 지도교수)
    • 함수 종속성 : 강좌시간 → 지도교수, (학생번호, 지도교수) → 강좌시간
    • 잘 보면 강좌시간도 결정자지만 후보키는 아님. 이런 경우가 BCNF 정규형에 위배되는 케이스

      학생번호 지도교수 강좌시간
      101 Alice 09:00
      102 Alice 09:00
      103 Bob 13:00

 

 

 

35. 무손실 분해

# 무손실 분해란

  • 테이블을 분해할 때, 원래의 데이터를 잃어버리지 않고 정확히 복원할 수 있게 분해한 것을 말함
  • 무손실 분해를 만족하려면 공통 속성을 통해 나머지 속성을 유일하게 결정할 수 있어야 함
  • 위 얘기들을 수학적으로 풀어쓰면 다음과 같음
    • 무손실 분해 : 릴레이션 R을 R1, R2로 분해할 때  R1   R2 = R  (⋈ : Natural Join)
    • 분해 조건 : R1 ∩ R2 → R1 혹은 R1 ∩ R2 → R2 둘 중 하나를 만족

# 무손실 분해 예시

  • 사실 분해된 테이블의 공통속성을 찾아서 어느 한쪽의 키가 되는지 확인하면 됨
  • 물론, 말만 들으면 이해하기 어렵고 예시를 보면 생각보다 쉬움 (근데 길어서 보기싫음)
더보기

CASE1 무손실분해

 

 

CASE2 손실분해

 

 

 

# 정규화를 얼마나 해야됨?

  • 사실 정규화는 5단계까지 있음 (제4정규형 : 다치종속성 관련, 제5정규형 조인종속성 관련 내용임)
  • 근데 실무에선 통상 제3 정규형이나 BCNF까지만 정규화함
  • 실제로 어지간한 릴레이션은 BCNF까지 정규화하면 실질적인 이상현상은 거의다 없어지기 때문