관계형 데이터베이스 설계에서 중복을 최소화하기 위해 데이터를 구조화하는 프로세스
불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
데이터베이스의 릴레이션 R에서 X와 Y를 R이 부분집합이라고 할 때, X의 값 각각에 대해 Y의 값이 오직 하나로 결정될 때 Y는 X에 종속된다.
학생 번호(pk) | 강좌 이름(pk) | 학생 이름 | 성적 |
---|---|---|---|
1 | 데이터베이스 | 신예찬 | 4.0 |
2 | 데이터베이스 | 조원상 | 3.5 |
3 | 운영체제 | 신광일 | 3.0 |
1 | 운영체제 | 신예찬 | 4.5 |
{학생 번호} → 학생 이름
{학생 번호, 강좌 이름} → 성적
학생 이름은 {학생 번호, 강좌 이름}의 일부분인 {학생 번호}에 종속되어 있다.
⇒ 학생 이름은 {학생 번호, 강좌 이름}에 부분 함수 종속이다.
학생 번호(pk) | 강좌 이름(pk) | 성적 |
---|---|---|
1 | 데이터베이스 | 4.0 |
2 | 데이터베이스 | 3.5 |
3 | 운영체제 | 3.0 |
1 | 운영체제 | 4.5 |
{학생 번호, 강좌 이름} → 성적
모든 속성은 반드시 하나의 원자값(atomic value)만 가져야 한다.
학생 번호(pk) | 강좌 이름(pk) | 학생 이름 | 성적 | 학부 | 학부 전화번호 |
---|---|---|---|---|---|
1 | 데이터베이스, 운영체제 | 신예찬 | 4.0, 4.5 | 컴퓨터공학부 | 123-4567 |
2 | 데이터베이스 | 조원상 | 3.5 | 전자공학부 | 098-7654 |
3 | 운영체제 | 신광일 | 3.0 | 철학과 | 567-1234 |
4 | 자료구조 | 최상엽 | 4.5 | 컴퓨터공학부 | 123-4567 |
학생 번호(pk) | 강좌 이름(pk) | 학생 이름 | 성적 | 학부 | 학부 전화번호 |
---|---|---|---|---|---|
1 | 데이터베이스 | 신예찬 | 4.0 | 컴퓨터공학부 | 123-4567 |
2 | 데이터베이스 | 조원상 | 3.5 | 전자공학부 | 098-7654 |
3 | 운영체제 | 신광일 | 3.0 | 철학과 | 567-1234 |
1 | 운영체제 | 신예찬 | 4.5 | 컴퓨터공학부 | 123-4567 |
4 | 자료구조 | 최상엽 | 4.5 | 컴퓨터공학부 | 123-4567 |
부분적 함수종속 제거, 모든 속성은 반드시 모든 기본키에 종속되어야 한다.
정규화 전
학생 번호(pk) | 강좌 이름(pk) | 학생 이름 | 성적 | 학부 | 학부 전화번호 |
---|---|---|---|---|---|
1 | 데이터베이스 | 신예찬 | 4.0 | 컴퓨터공학부 | 123-4567 |
2 | 데이터베이스 | 조원상 | 3.5 | 전자공학부 | 098-7654 |
3 | 운영체제 | 신광일 | 3.0 | 철학과 | 567-1234 |
1 | 운영체제 | 신예찬 | 4.5 | 컴퓨터공학부 | 123-4567 |
4 | 자료구조 | 최상엽 | 4.5 | 컴퓨터공학부 | 123-4567 |
정규화 후
학생 번호(pk) | 강좌 이름(pk) | 성적 |
---|---|---|
1 | 데이터베이스 | 4.0 |
2 | 데이터베이스 | 3.5 |
3 | 운영체제 | 3.0 |
1 | 운영체제 | 4.5 |
4 | 자료구조 | 4.5 |
학생 번호(pk) | 학생 이름 | 학부 | 학부 전화번호 |
---|---|---|---|
1 | 신예찬 | 컴퓨터공학부 | 123-4567 |
2 | 조원상 | 전자공학부 | 098-7654 |
3 | 신광일 | 철학과 | 567-1234 |
4 | 최상엽 | 컴퓨터공학부 | 123-4567 |
학생 번호(pk) | 학생 이름 | 학부 | 학부 전화번호 |
---|---|---|---|
1 | 신예찬 | 컴퓨터공학부 | 123-4567 |
2 | 조원상 | 전자공학부 | 098-7654 |
3 | 신광일 | 철학과 | 567-1234 |
4 | 최상엽 | 컴퓨터공학부 | 124-5678 |
이행적 함수종속 제거, 기본키가 아닌 모든 속성 간에는 서로 종속될 수 없다.
학생 번호(pk) | 학생 이름 | 학부 | 학부 전화번호 |
---|---|---|---|
1 | 신예찬 | 컴퓨터공학부 | 123-4567 |
2 | 조원상 | 전자공학부 | 098-7654 |
3 | 신광일 | 철학과 | 567-1234 |
4 | 최상엽 | 컴퓨터공학부 | 123-4567 |
학생 번호(pk) | 학생 이름 | 학부 |
---|---|---|
1 | 신예찬 | 컴퓨터공학부 |
2 | 조원상 | 전자공학부 |
3 | 신광일 | 철학과 |
4 | 최상엽 | 컴퓨터공학부 |
학부(pk) | 학부 전화번호 |
---|---|
컴퓨터공학부 | 123-4567 |
전자공학부 | 098-7654 |
철학과 | 567-1234 |
기본키가 아닌 속성이 기본키의 속성을 결정지을 수 없다.
후보키: {학생 번호, 강좌 이름}, {학생 번호, 교수}
제3 정규형을 만족하지만 BCNF를 만족하지 않는 릴레이션
학생 번호(pk) | 강좌 이름(pk) | 교수 |
---|---|---|
1 | 데이터베이스 | 이승협 |
2 | 데이터베이스 | 이승협 |
3 | 운영체제 | 유회승 |
1 | 운영체제 | 유회승 |
4 | 자료구조 | 김지호 |
함수 종속 관계에서 모든 결정자가 후보키가 아니다.
학생 번호(pk) | 강좌 이름(pk) |
---|---|
1 | 데이터베이스 |
2 | 데이터베이스 |
3 | 운영체제 |
1 | 운영체제 |
4 | 자료구조 |
교수(pk) | 강좌 이름 |
---|---|
이승협 | 데이터베이스 |
유회승 | 운영체제 |
김지호 | 자료구조 |