국민대학교에서 "오라클로 배우는 데이터베이스 개론과 실습(2판)" 을 이용한
신인수 교수님의 강의 교안을 이용하여 수업 내용을 정리하였습니다
1. 이상현상(anomaly)
1.1 이상현상의 개념
이상현상(Anomaly)이란 잘못 설계된 테이블로 인해 삽입, 삭제, 수정 같은 데이터 조작 시 데이터 일관성이 깨지는 현상!
=> 불일치(inconsistency : 일관성 없음) 문제 발생
이상현상에는
- 삭제이상(deletion anomly)
투플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
(연쇄삭제 문제 발생)
- 삽입이상(insrtion anomly)
투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상
(NULL 값 문제 발생)
- 수정이상(update anomly)
투플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상
(불일치 문제 발생)
가 있다!
이런 경우 테이블 구조를 수정하여 (테이블을 분리) 이상현상이 일어나지 않게 해야함
ex. Summer 테이블의 class 속성을 기본키로 하여 SummerPrice (각 class 별로 price만 담은 테이블) 과
Summer 테이블의 sid 속성을 기본키로 하여 SummerEnroll (각 sid 별로 class만 담은 테이블) 을 따로 만듬
이렇게 하면 학생의 학번(sid) 별로 수강하는 과목을 찾을 때는 SummerEnroll 테이블에서, 강좌의 수강료를 알고 싶을 때는 SummerPrice 테이블에서 관련 SQL문을 작성하여 처리할 수 있음
=> 삭제, 삽입, 수정이 각각 해당되는 테이블에서 진행되므로 이상 없음!
2. 함수 종속성
2.1 함수 종속성의 개념
학생수강성적 릴레이션의 각 속성 사이에는 의존성이 존재함
=> 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를 '속성 B는 속성 A에 종속한다' 혹은
'속성 A는 속성 B를 결정한다' 라고 함
'A -> B'로 표기하며, A를 B의 결정자라고 함
2.2 함수 종속성 다이어그램
함수 종속성 다이어그램은 함수 종속성을 나타내는 표기법이다
- 릴레이션의 속성 : 직사각형
- 속성 간의 함수 종속성 : 화살표
- 복합 속성 : 직사각형으로 묶어서 그림
2.3 함수 종속성 규칙
2.4 함수 종속성과 기본키
릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 함
=> 기본키가 함수 종속성에서 어떤 역할을 하는지 알면 이상현상을 제거하는 정규화 과정을 쉽게 이해할 수 있음
릴레이션 R(K, A1, A2, A3 , ... , An)에서 K가 기본키이면, K -> R이 성립함
=> 즉, 기본키는 릴레이션의 모든 속성에 대한 결정자임!
이상현상은 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을 때 나타남
(기본키가 아니면서 결정자인 속성이 있을 때 발생)
=> 위에서 봤던 학생수강성적 릴레이션의 경우 학생 정보(학생번호, 학생이름, 주소, 학과)와 강좌 정보(강좌이름, 강의실) 가 한 릴레이션에 포함되어서 이상현상이 나타남!
2.5 이상현상과 결정자
이상현상을 없애려면 위에서 다뤘던대로 릴레이션을 분해해야함
학생수강성적 릴레이션을 예로 살펴보면
1단계 : (강좌이름, 강의실)을 강의실 릴레이션으로 분리
2단계 : (학생번호, 강좌이름, 성적)을 학생성적 릴레이션으로 분리
3단계 : (학과, 학과사무실)을 학과 릴레이션으로 분리
분해할 때 부분 릴레이션의 결정자는 원래 릴레이션에 남겨두어야함
=> 그래야 분해된 부분 릴레이션이 원래 릴레이션과 관계를 형성할 수 있음
3. 정규화 (normalization)
3.1 정규화 개념
정규화란 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정이다
=> 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분 가능
(정규형이 높을수록 이상현상은 줄어듦)
정규화 과정
제 1정규형
릴레이션 R의 모든 속성 값이 원자값을 가지면 제 1정규형이라고 함
제 2정규형
릴레이션 R이 제 1정규형이고, 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때 제 2정규형이라고 함
완전 함수 종속 : A와 B가 릴레이션 R의 속성이고 A -> B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전 함수 종속이라고 함!
=> 예를 들어, 기본키가 {A, B}인 경우, 속성 C가 {A, B}에 대해 완전 함수 종속되려면, C가 A나 B중 하나에만 의존해서는 안 되고, 반드시 A와 B 전체에 의존해야함
제 3정규형
릴레이션 R이 제 2 정규형이고 기본키가 아닌 속성이 기본키에 비이행적(non-transitive)으로 종속할 때 (직접 종속)
제 3정규형이라고 함!
이행적 종속이란 A -> B, B -> C가 성립할 때 A -> C가 성립되는 함수 종속성
BCNF (Boyce-Codd Normal Form)
릴레이션 R에서 함수 종속성 X -> Y가 성립할 때 모든 결정자 X가 후보키이면 BCNF 정규형이라고 함
3.3 무손실 분해
릴레이션 R을 릴레이션 R1과 R2로 분해할 때 R1 ⋈ R2 = R이면 무손실 분해(lossless-join decomposition) 라고 함
=> R1 ∩ R2 -> R1 혹은 R1 ∩ R2 -> R2 중 하나를 만족해야 함
[분해 1]의 경우 R1, R2를 다시 조인하면 원래 릴레이션이 되지만
[분해 2]의 경우 다시 조인하면 의미없는 투플이 생김!
=> 무손실 분해 조건을 만족하지 못하고 손실(loss) 분해되었기 때문
3.4 정규화 정리
대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 때문에 보통 BCNF까지 정규화를 진행함
'Database > 데이터베이스' 카테고리의 다른 글
Chapter 08. 트랜잭션, 동시성 제어, 회복 (0) | 2024.05.26 |
---|---|
Chapter 06. 데이터 모델링 (0) | 2024.05.15 |
Chapter 05. 데이터베이스 프로그래밍 (1) | 2024.04.16 |
Chapter 04. SQL 고급 (1) | 2024.04.15 |
Chapter 03. SQL 기초 (1) | 2024.04.14 |