정규형

My Job/MSSQL 2012. 11. 20. 20:23

1정규형 (1NF)

- 각 행의 데이터들은 원자적 값을 가져야 하며 각 행은 기본 키를 가져야 한다.

- 원자적 열은 그 열에 같은 타입의 데이터를 여러 개 가질 수 없거나 (예를 들어 취미생활
이라는 열에 데이터가 독서, 영화보기, 축구처럼), 같은 타입의 데이터를 여러 열에 가질 수 없는 것 (예를 들어 똑 같은 취미생활이라는 타입의 열이 취미생활1’, ‘취미생활2’ 의 두 개의 열로 구성)을 말한다.

- 기본 키는 NULL이 될 수 없으며(NOT NULL로 선언) 레코드가 삽입될 때 값이 있어야 하고,
간결하며, 값이 변경되지 않아야 한다.

 

2정규형 (2NF)

- 1정규형 (1NF)을 만족해야 한다.

- 부분적 함수 종속(의존)이 없다.

- 부분적 함수 종속(의존)이란 합성키 사용시에 발성하며, 키가 아닌 열이 합성키 일부에
의존할 때 발생한다.

- 부분적 함수 종속을 없애고 싶다면 테이블 안의 모든 열이 기본 키의 일부 이거나,
하나의 열로 된 기본 키를 가진다.

- 부분적 함수 종속의 예

ID

생년월일

이름

생일

주소

1

1979-1-1

홍길동

1-1

방배동

2

1980-12-1

이순신

12-1

서초동

ID와 생년월일 2개의 합성키로 이루어진 테이블에서 생년월일()의 값이 변경되면
생일 값도 종속되어 변경되어야 하므로 키가 아닌 열이 합성키 일부에 의존한다.

 

 

3정규형 (3NF)

- 이행적 함수 종속이 없다.

- 이행적 함수 종속은 키가 아닌 열이 다른 키가 아닌 열과 관련될 때
, 키가 아닌 열이 변할 때, 다른 키가 아닌 열이 변경되면 이행적 함수 종속이다.

- 이행적 함수 종속의 예

ID

생년월일

이름

생일

주소

1

1979-1-1

홍길동

1-1

방배동

2

1980-12-1

이순신

12-1

서초동

    
2정규형(2NF)을 만족하기 위하여 ID column만 기본 키로 해 놓았지만, 키가 아닌
생년월일 값이 변경되면 키가 아닌 생일 값도 바뀌는 이행적 함수 종속이 발생한다.
이럴 경우 생일 column이나, 생년월일 column을 따로 빼내어 다른 테이블로 만들어
참조키 설정 후 연결하게 되면 제3정규형을 만족하는 테이블을 얻을 수 있다.

 

'My Job > MSSQL' 카테고리의 다른 글

How to debug SQL deadlocks?  (0) 2012.12.06