데이터베이스 정규화: Difference between revisions

From IT위키
 
(14 intermediate revisions by 10 users not shown)
Line 4: Line 4:
;;Database Normalization
;;Database Normalization


==이상(Anomaly) 현상==
==[[데이터베이스 이상 현상|이상(Anormaly) 현상]]==


*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
Line 12: Line 12:
===이상 종류===
===이상 종류===


;삽입할때 잘못 삽입됨, 갱신할때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고
;삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고


*'''삽입 이상(Insertion Anomaly)'''
*'''삽입 이상(Insertion Anomaly)'''
Line 27: Line 27:
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소
*효과적인 검색 알고리즘을 생성 가능
*효과적인 검색 알고리즘 생성 가능




Line 51: Line 51:
|사회
|사회
|홍길동, 임꺽정
|홍길동, 임꺽정
|}
{| class="wikitable"
|+
!수강과목
!수강자1
!수강자2
!수강자3
|-
|국어
|홍길동
|
|
|-
|수학
|신사임당
|홍길동
|
|-
|영어
|고길동
|신사임당
|홍길동
|}
|}
:*수강자 속성이 원자값이 아니다.
:*수강자 속성이 원자값이 아니다.
:*유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다


*'''발생할 수 있는 이상(Anomaly)의 예'''
* '''발생할 수 있는 이상(Anomaly)의 예'''
**'''갱신이상''': 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
**'''갱신 이상''': 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
***UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
*** UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
**'''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
**'''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
***DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'
***DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'
Line 64: Line 87:
!수강과목
!수강과목
!수강자
!수강자
!일련번호
!일련번호  
|-
|-
|수학
|수학
Line 78: Line 101:
|3
|3
|-
|-
|사회
|사회  
|홍길동
|홍길동
|4
|4
Line 86: Line 109:
|5
|5
|}
|}
:*가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.


Line 118: Line 141:
|천교수
|천교수
|-
|-
|1925
| 1925
|장영실
|장영실
|컴퓨터과
|컴퓨터과
Line 126: Line 149:
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.
:*지도교수 사무실도 학번에


*'''발생할 수 있는 이상(Anomaly)의 예'''
*'''발생할 수 있는 이상(Anomaly)의 예'''
**삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.
**삽입 이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 중복 정보인 학과장 정보가 삽입되어야 한다.
**갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
**갱신 이상: 컴퓨터과의 학과장이 변경될 경우, 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
**삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.
**삭제 이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져 버린다.
*'''2NF를 만족시키는 릴레이션'''
*'''2NF를 만족시키는 릴레이션'''


Line 144: Line 166:
|-
|-
|1845
|1845
|임꺽정
|임꺽정  
|전자과
|전자과
|-
|-
|1706
|1706
|신사임당
| 신사임당
|기계과
|기계과
|-
|-
|1925
|1925
|장영실
|장영실
|컴퓨터과
|컴퓨터과  
|}
|}
:{| class="wikitable"
:{| class="wikitable"
!학과
!학과
!학과장
! 학과장
|-
|-
|컴퓨터과
|컴퓨터과
Line 165: Line 187:
|박교수
|박교수
|-
|-
|기계과
| 기계과  
|천교수
|천교수
|}
|}
Line 178: Line 200:
*3NF를 만족하지 않는 릴레이션
*3NF를 만족하지 않는 릴레이션
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홀길동→공대인 관계가 성립한다.
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.


{| class="wikitable"
{| class="wikitable"
!학번
! 학번
!이름
!이름
!소속학과
!소속학과
Line 187: Line 209:
|-
|-
|1901
|1901
|홍길동
|홍길동  
|컴퓨터과
|컴퓨터과  
|공대
|공대
|-
|-
|1845
|1845
|임꺽정
| 임꺽정
|전자과
|전자과
|공대
|공대  
|-
|-
|1706
|1706
|신사임당
|신사임당  
|경제
|경제
|경상
|경상  
|-
|-
|1925
|1925
Line 208: Line 230:


*'''발생할 수 있는 이상(Anomaly)의 예'''
*'''발생할 수 있는 이상(Anomaly)의 예'''
**'''삽입이상''': 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
**'''삽입 이상''': 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
**'''갱신이상''': 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
**'''갱신 이상''': 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
**'''삭제이상''': 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.
**'''삭제 이상''': 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.
*3NF를 만족시키는 릴레이션
*3NF를 만족시키는 릴레이션


Line 224: Line 246:
|1845
|1845
|임꺽정
|임꺽정
|전자과
|전자과  
|-
|-
|1706
|1706  
|신사임당
|신사임당
|경제
|경제
Line 236: Line 258:
{| class="wikitable"
{| class="wikitable"
!소속학과
!소속학과
!대학
!대학  
|-
|-
|컴퓨터과
|컴퓨터과
|공대
|공대
|-
|-
|전자과
| 전자과
|공대
|공대
|-
|-
Line 250: Line 272:
|경상
|경상
|}
|}
===BCNF===
===BCNF===


;Boyce and Codd Normal Form
;Boyce and Codd Normal Form
;BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
;BCNF를 만족하려면 결정자이면서 후보 키가 아닌 속성을 제거해야 한다.


*BCNF를 만족하지 않는 릴레이션
*BCNF를 만족하지 않는 릴레이션
Line 259: Line 282:
{| class="wikitable"
{| class="wikitable"
|+
|+
!학번
! 학번
!과목
!과목
!교수
!교수
Line 272: Line 295:
|-
|-
|200
|200
|네트워크
|네트워크  
|장영실
|장영실
|-
|300
|네트워크
|장영실
|-
|-
|300
|300
Line 280: Line 307:
|}
|}


* 제약사항
*제약사항
** 한 학생은 동일한 과목에 대애 한교수에게만 수강가능
**한 학생은 동일한 과목에 대해 한 교수에게만 수강 가능
** 각 교수는 하나의 과목만 담당
**각 교수는 하나의 과목만 담당
** 한 과목은 여러 교수가 담당가능
**한 과목은 여러 교수가 담당 가능
* 분석
*후보 키: (학번, 과목)
** (학번 + 과목)은 교수를 결정 짓는다.
*함수적 종속성
** 교수는 과목을 결정 짓는다.
**(학번, 과목) → 교수
** 즉, 교수 또한 결정자인데 교수는 학번을 결정 지을 수 없으므로 후보키는 아니다.
**교수 → 과목


*'''발생할 수 있는 이상(Anomaly)의 예'''
*'''발생할 수 있는 이상(Anomaly)의 예'''
**'''삽입이상''': 200학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
**'''삽입 이상''': 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
**'''갱신이상''': 홍길동의 담당 과목이 알고리즘으로 바뀌었다. 담당 과목을 변경할 경우, 학생의 수강 과목이 변경되어 버린다.
**'''갱신 이상''': 장영실 교수의 담당 과목이 알고리즘으로 변경되면, 장영실 교수의 과목을 수강하는 모든 학생들의 튜플도 검색해서 수정해야 한다.
**'''삭제이상''': 300학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.
**'''삭제 이상''': 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.
*BCNF 분해 방법
**함수적 종속성 Z → X가 있으며 Z가 후보 키가 아닌 경우, (R - X)와 ZX로 릴레이션을 분리
**예시. 함수적 종속성 (교수 → 과목)이 있으며, 교수가 후보 키가 아니기 때문에, (학번, 교수), (교수, 과목)으로 분리
*BCNF 분해의 특징
**무손실 조인 분해
**종속성 유지가 불가능할 수 있음(예시의 경우 함수적 종속성 "(학번, 과목) → 교수"를 유지할 수 없음)
*BCNF를 만족시키는 릴레이션
*BCNF를 만족시키는 릴레이션
**삽입 이상 해결: 200 학생이 데이터베이스를 수강하기 위해, 홍길동 교수의 정보가 삽입될 필요가 없어진다.
**갱신 이상 해결: 장영실 교수의 담당 과목을 변경하기 위해 다른 튜플들을 검색해서 수정할 필요가 없다.
**삭제 이상 해결: 300 학생이 자퇴하면, 300 학생의 수강 정보만 삭제하면 된다.


{| class="wikitable"
{| class="wikitable"
!학번
!학번
!과목코드
!교수
|-
|-
|100
|100
|DB01
|홍길동
|-
|-
|100
|100
|DS01
|임꺽정
|-
|-
|200
|200
|NW01
|장영실
|-
|-
|300
|300
|AI01
|장영실
|}
|}
{| class="wikitable"
{| class="wikitable"
!과목코드
!과목
!과목
!교수
! 교수
|-
|-
|DB01
|데이터베이스
|데이터베이스
|홍길동
|홍길동
|-
|-
|DS01
|자료구조
|자료구조
|임꺽정
|임꺽정
|-
|-
|NW01
|네트워크
|네트워크
|장영실
|장영실
|-
|AI01
|인공지능
|유관순
|}
|}


Line 340: Line 368:
*4NF를 만족하지 않는 릴레이션
*4NF를 만족하지 않는 릴레이션
*'''발생할 수 있는 이상(Anomaly)의 예'''
*'''발생할 수 있는 이상(Anomaly)의 예'''
*4NF를 만족시키는 릴레이션
* 4NF를 만족시키는 릴레이션


===5NF===
===5NF===


;Fifth Normal Form
;Fifth Normal Form
;5NF를 만족하려면 조인 종속성 제거해야 한다
;5NF를 만족하려면 조인 종속성 제거해야 한다.


*5NF를 만족하지 않는 릴레이션
*5NF를 만족하지 않는 릴레이션
*'''발생할 수 있는 이상(Anomaly)의 예'''
*'''발생할 수 있는 이상(Anomaly)의 예'''
*5NF를 만족시키는 릴레이션
*5NF를 만족시키는 릴레이션

Latest revision as of 16:18, 27 July 2024

분류:데이터베이스 분류:정보처리기사

Database Normalization

이상(Anormaly) 현상[edit | edit source]

  • 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
  • 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생
  • 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생

이상 종류[edit | edit source]

삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고
  • 삽입 이상(Insertion Anomaly)
    • 데이터 삽입 시 의도와 다른 값들도 삽입됨
  • 삭제 이상(Delete Anomaly)
    • 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨
  • 갱신 이상(Update Anomaly)
    • 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생

정규화 목적[edit | edit source]

  • 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
  • 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할
  • 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
  • 데이터 삽입 시 릴레이션을 재구성할 필요성 감소
  • 효과적인 검색 알고리즘 생성 가능


정규화 과정[edit | edit source]

1NF[edit | edit source]

First Normal Form

1NF를 만족하려면 도메인이 원자값이어야 한다.

  • 1NF를 만족하지 않는 릴레이션
수강과목 수강자
수학 홍길동
과학 임꺽정, 신사임당
사회 홍길동, 임꺽정
수강과목 수강자1 수강자2 수강자3
국어 홍길동
수학 신사임당 홍길동
영어 고길동 신사임당 홍길동
  • 수강자 속성이 원자값이 아니다.
  • 유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다
  • 발생할 수 있는 이상(Anomaly)의 예
    • 갱신 이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
      • UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
    • 삭제 이상: 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
      • DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'
  • 1NF를 만족시키는 릴레이션
수강과목 수강자 일련번호
수학 홍길동 1
과학 임꺽정 2
과학 신사임당 3
사회 홍길동 4
사회 임꺽정 5
  • 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
  • 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.

2NF[edit | edit source]

Second Normal Form
2NF를 만족하려면 부분적 함수 종속을 제거해야 한다.
  • 즉 완전 함수 종속이 되도록 해야 한다.
  • 2NF를 만족하지 않는 릴레이션
학번 이름 소속학과 학과장
1901 홍길동 컴퓨터과 김교수
1845 임꺽정 전자과 박교수
1706 신사임당 기계과 천교수
1925 장영실 컴퓨터과 김교수
  • 학번 <-> 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)
  • 하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
  • 즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입 이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 중복 정보인 학과장 정보가 삽입되어야 한다.
    • 갱신 이상: 컴퓨터과의 학과장이 변경될 경우, 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
    • 삭제 이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져 버린다.
  • 2NF를 만족시키는 릴레이션
학번 이름 소속학과
1901 홍길동 컴퓨터과
1845 임꺽정 전자과
1706 신사임당 기계과
1925 장영실 컴퓨터과
학과 학과장
컴퓨터과 김교수
전자과 박교수
기계과 천교수
  • 이와 같이 릴레이션을 구분하는 것이 바람직하다.

3NF[edit | edit source]

Third Normal Form
3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
  • 이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계
  • 3NF를 만족하지 않는 릴레이션
    • 소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.
    • 홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.
학번 이름 소속학과 대학
1901 홍길동 컴퓨터과 공대
1845 임꺽정 전자과 공대
1706 신사임당 경제 경상
1925 장영실 경영 경상
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입 이상: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
    • 갱신 이상: 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
    • 삭제 이상: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.
  • 3NF를 만족시키는 릴레이션
학번 이름 소속학과
1901 홍길동 컴퓨터과
1845 임꺽정 전자과
1706 신사임당 경제
1925 장영실 경영
소속학과 대학
컴퓨터과 공대
전자과 공대
경제 경상
경영 경상

BCNF[edit | edit source]

Boyce and Codd Normal Form
BCNF를 만족하려면 결정자이면서 후보 키가 아닌 속성을 제거해야 한다.
  • BCNF를 만족하지 않는 릴레이션
학번 과목 교수
100 데이터베이스 홍길동
100 자료구조 임꺽정
200 네트워크 장영실
300 네트워크 장영실
300 인공지능 유관순
  • 제약사항
    • 한 학생은 동일한 과목에 대해 한 교수에게만 수강 가능
    • 각 교수는 하나의 과목만 담당
    • 한 과목은 여러 교수가 담당 가능
  • 후보 키: (학번, 과목)
  • 함수적 종속성
    • (학번, 과목) → 교수
    • 교수 → 과목
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입 이상: 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
    • 갱신 이상: 장영실 교수의 담당 과목이 알고리즘으로 변경되면, 장영실 교수의 과목을 수강하는 모든 학생들의 튜플도 검색해서 수정해야 한다.
    • 삭제 이상: 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.
  • BCNF 분해 방법
    • 함수적 종속성 Z → X가 있으며 Z가 후보 키가 아닌 경우, (R - X)와 ZX로 릴레이션을 분리
    • 예시. 함수적 종속성 (교수 → 과목)이 있으며, 교수가 후보 키가 아니기 때문에, (학번, 교수), (교수, 과목)으로 분리
  • BCNF 분해의 특징
    • 무손실 조인 분해
    • 종속성 유지가 불가능할 수 있음(예시의 경우 함수적 종속성 "(학번, 과목) → 교수"를 유지할 수 없음)
  • BCNF를 만족시키는 릴레이션
    • 삽입 이상 해결: 200 학생이 데이터베이스를 수강하기 위해, 홍길동 교수의 정보가 삽입될 필요가 없어진다.
    • 갱신 이상 해결: 장영실 교수의 담당 과목을 변경하기 위해 다른 튜플들을 검색해서 수정할 필요가 없다.
    • 삭제 이상 해결: 300 학생이 자퇴하면, 300 학생의 수강 정보만 삭제하면 된다.
학번 교수
100 홍길동
100 임꺽정
200 장영실
300 장영실
과목 교수
데이터베이스 홍길동
자료구조 임꺽정
네트워크 장영실

4NF[edit | edit source]

Fourth Normal Form
4NF를 만족하려면 다치 종속성을 제거해야 한다.
  • 4NF를 만족하지 않는 릴레이션
  • 발생할 수 있는 이상(Anomaly)의 예
  • 4NF를 만족시키는 릴레이션

5NF[edit | edit source]

Fifth Normal Form
5NF를 만족하려면 조인 종속성 제거해야 한다.
  • 5NF를 만족하지 않는 릴레이션
  • 발생할 수 있는 이상(Anomaly)의 예
  • 5NF를 만족시키는 릴레이션