정규형
제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 |
---|