35
데이터베이스 개론 정규화 NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

데이터베이스 정규화

Embed Size (px)

Citation preview

Page 1: 데이터베이스 정규화

데이터베이스 개론

정규화

NHN NEXT 정호영

나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

Page 2: 데이터베이스 정규화

GOAL

- 1 정규형의 정의를 안다.

- 2 정규형의 정의를 안다.

- 3 정규형의 정의를 안다.

- BCNF의 정의를 안다.

-주어진 스키마가 어떤 정규형을 만족하는지 판단할 수 있다.

Page 3: 데이터베이스 정규화

데이터베이스 설계 다시보기

데이터베이스 설계

= 테이블을 만드는 과정

테이블을 만드는 과정

= 애트리뷰트를 어떻게 묶을 것인지를 결정

좋은 테이블을 설계

= 애트리뷰트를 잘 묶는 방법

Page 4: 데이터베이스 정규화

잘 설계된 테이블

다른 테이블의 애트리뷰트 값을 읽어오는 것은

외래키의 참조를 통해서만 가능해야 한다.

Page 5: 데이터베이스 정규화

잘못된 설계

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

EMP_DEPT

SSN PNUMBER HOURS ENAME PNAME PLOCATIONS

EMP_PROJ

fd1

fd2

fd3

Page 6: 데이터베이스 정규화

잘못된 설계의 문제점

데이터의 중복 발생

이상현상(anormaly) 발생

이상현상

- 삽입이상/ 삭제이상 / 갱신이상

Page 7: 데이터베이스 정규화

삽입 이상

새로운 부서를 신설하고 싶습니다.

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

EMP_DEPT

Page 8: 데이터베이스 정규화

삭제 이상

마지막 사원이 나갔습니다.

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

EMP_DEPT

Page 9: 데이터베이스 정규화

갱신 이상

개발팀의 이름이 dev팀으로 바뀌었습니다.

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

EMP_DEPT

Page 10: 데이터베이스 정규화

정규형 (Normal Form)

이상현상이 잘 안 생기는 좋은 테이블이 갖추어야 할 조건

- 1, 2, 3 정규형

- BCNF

Page 11: 데이터베이스 정규화

정규화 (Nomalization)

-테이블이 정규형을 만족할 수 있도록 잘 분해하는 과정

- 1정규화 테이블이 1 정규형을 만족하게 됨

- 3정규화 테이블이 3 정규형을 만족하게 됨

Page 12: 데이터베이스 정규화

함수적 종속성

두 애트리뷰트 X,Y에서

X가 Y를 함수적으로 결정

X Y

Page 13: 데이터베이스 정규화

함수적 종속성

두 애트리뷰트 X,Y에서

X의 값이 유일한 Y값을 결정

X Y

Page 14: 데이터베이스 정규화

함수적 종속성

두 애트리뷰트 X,Y에서

Y는 X에 함수적으로 종속

X Y

Page 15: 데이터베이스 정규화

* 진짜 함수

Y = X * X : 함수

X가 Y를 함수적으로 결정한다.

Y가 달라지면 X값은 반드시 달라진다.

cf.) X가 달라져도 Y는 같을 수 있다.

X Y

X 0 1 -1 2 -2 …

Y 0 1 1 4 4 …

Page 16: 데이터베이스 정규화

함수적 종속성 예시

1. 주민번호 이름

2. 부서 ID 부장이름

3. 이름 직속상관

이 중에 틀린 것은?

Page 17: 데이터베이스 정규화

key 다시보기

슈퍼키(super key)

-애트리뷰트의 집합

-고유하게 식별됨

예)

- [사번, 부양가족이름]

- [주민번호 앞자리, 주민번호 뒷자리, 이름]

- [사번,이름, 성별, 나이, 부서, 집전화, … ]

Page 18: 데이터베이스 정규화

key 다시보기

후보키 (candidate key)

-슈퍼키의 부분집합

-구성 애트리뷰트중 하나라도 제거하면 슈퍼 키가 아닌 것

앞 장의 예제에서 후보키가 있나요?

- [사번, 부양가족이름]

- [주민번호 앞자리, 주민번호 뒷자리, 이름]

- [사번,이름, 성별, 나이, 부서, 집전화, … ]

Page 19: 데이터베이스 정규화

key 다시보기

기본 키 (primary key)

- 여러 후보키 중 대표적인 키 하나가 테이블의 기본 키가 됨

Page 20: 데이터베이스 정규화

함수적 종속성과 후보키(candidate key)

모든 다른 애트리뷰트을 함수적으로 결정하는 애트리뷰트

ENAME SSN BDATE ADDRESS DNUMBER

EMP_DEPT

Page 21: 데이터베이스 정규화

제 1 정규형

- 테이블은 반드시 하나 이상의 키를 가지고 있어야 한다.

- 애트리뷰트의 도메인이 오직 원자값만을 포함한다.

Page 22: 데이터베이스 정규화

제 1 정규형

다음과 같은 속성은 허용하지 않는다.

- 복합 애트리뷰트

- 다중 애트리뷰트

- 중첩 릴레이션

Page 23: 데이터베이스 정규화

제 1 정규형 이것만 기억하자.

기본키가 있고 애트리뷰트가 원자값을 가지면 제 1 정규형

Page 24: 데이터베이스 정규화

진짜 제 1 정규형의 정의

http://ko.Wikipedia.org/wiki/제1정규형

(1)열에는 위-아래의 순서가 없다.

(2)행에는 좌-우의 순서가 없다.

(3)중복되는 열이 없다.

(4)열과 행의 교차점에는 반드시 하나의 값이 존재해야 한다.

Page 25: 데이터베이스 정규화

완전 함수적 종속과 제 2 정규형

*완전 함수적 종속

ABC X라고 할 때

ABC중 하나라도 제거하면 함수적 종속이 발생하지 않는 경우

Page 26: 데이터베이스 정규화

완전 함수적 종속과 제 2 정규형

*부분 함수적 종속

완전함수적 종속이 아닌 경우 부분 함수적 종속이라고 함

예)

ABC D

BC D

Page 27: 데이터베이스 정규화

제 2 정규형

- 1정규형을 만족하고

-후보 키가 아닌 애트리뷰트들이

후보 키에 대해 완전 함수적 종속인 경우

Page 28: 데이터베이스 정규화

제 2 정규형

후보 키는? (SSN, PNUMBER)

SSN PNUMBER HOURS ENAME PNAME PLOCATIONS

EMP_PROJ

fd1

fd2

fd3

Page 29: 데이터베이스 정규화

제 2 정규형

부분 함수적 종속이 발생하므로 2 정규형이 아님

SSN PNUMBER HOURS ENAME PNAME PLOCATIONS

EMP_PROJ

fd1

fd2

fd3

완전 함수적 종속성

부분 함수적 종속성

부분 함수적 종속성

Page 30: 데이터베이스 정규화

제 2 정규형

고쳐 봅시다!

SSN PNUMBER HOURS ENAME PNAME PLOCATIONS

EMP_PROJ

fd1

fd2

fd3

완전 함수적 종속성

부분 함수적 종속성

부분 함수적 종속성

Page 31: 데이터베이스 정규화

이행 종속과 제 3 정규형

*이행 종속

X Y 이고 Y Z 이면 X Z

Page 32: 데이터베이스 정규화

제 3 정규형

- 2정규형 +

-후보 키가 아닌 애트리뷰트들에서 이행 종속이 발생하지 않는다.

Page 33: 데이터베이스 정규화

제 3 정규형 위배

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

EMP_DEPT

이행 함수적 종속성

Page 34: 데이터베이스 정규화

BCNF

X Y 인 모든 X, Y에 대하여

(1) Y가 X의 부분집합이거나

(2) X는 후보 키어야 한다.

-후보 키가 아닌 애트리뷰트가

다른 애트리뷰트를 함수적으로 결정하면 BCNF가 아니다.

기타 : cycle이 생기면 BCNF가 아니다.

Page 35: 데이터베이스 정규화

THANK YOU!!!