SQL 정규형 편! _ 1정규형, 2정규형, 3정규형

반응형



SQL 에는 여러 제약조건 및 각종 무결성 조건,
그리고 정규형이 있는데요
알아볼 정규형은 1정규형, 2정규형, 3정규형 입니다.

읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥



사실, 3정규형 까지는 조금만 신경쓰면 크게 어렵지않고
3정규형 까지만 만족하더라도 어느정도 테이블 관리를 쉽게 하고
데이터 관리또한 쉽게할 수 있으므로,
그 이상의 정규형 ( 4정규형 같은.. ) 은 좋긴 하지만 머리 아프죠 ^^;;

우선 1 정규형 ( 1NF ) 입니다
각 행의 데이터들은 원자적 값을 가져야 한다.
각 행은 기본키를 가져야 한다.
기본키는 NULL 이 될 수 없다 ( NOT NULL 로 선언 )
기본키는 레코드가 삽입될 때 값이 있어야 한다.
기본키는 간결해야 한다.
기본키의 값은 변경되지 않아야 한다.


여기에서 첫번째 항목의 원자적 이라는 게 눈에 띄는데,
그럼 이 원자적이 무엇인지 먼저 알아야 겠지...

원자적 규칙1 :
원자적 열은 그 열에 같은 타입의 데이터를 여러개 가질 수 없다
( 예를들어 취미생활 이라는 열에 데이터가 ' 독서, 영화보기, 축구' 처럼 )

원자적 규칙2 :
같은 타입의 데이터를 여러열에 가질 수 없다
( 똑같이 취미생활이라는 열이

 취미생활1 취미생활2 
 독서 영화보기 

처럼 되어 있으면 원자적이 아니다 )

그럼 1정규형은 끝났고........


2정규형 ( 2NF ) 는
1정규형 ( 1NF ) 가 만족해야 한다.
부분적 함수 의존이 없다.


여기서 또 새로운 용어가 나오네요..

부분적 함수 종속 ( 또는 부분적 함수 의존 ) 이 무엇인지 알아보죠

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


말이 왠지 어렵고 어려우니깐,
그림으로 또 그려봤습니다.


여기에서 보면 우선 id 와 생년월일이라는 2개의 칼럼이 하나의 합성키로 선언되 있는데,
여기서 만일 '생년월일' 칼럼이 변경되면 '생일' 칼럼도 영향을 받아 변경되야 합니다.
여기서 '생일' 칼럼은 키가 아니므로,
이런 경우에 부분적 함수 종속 이라고 합니다

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


를 만족시키면 됩니다.

이제 2정규형 까지 만족하였으니,
3정규형도 빠르게 알아보죠

3정규형( 3NF )
2정규형( 2NF ) 가 만족한다.
이행적 함수 종속이 없다


또 모르는 말..........어휴....
이행적 함수 종속 이 무엇인지 또 알아야 겠군요 --;;;

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

또 이해가 어려우므로 그림으로~~

일단 2NF , 즉 2 정규형을 만족시키기 위해 id 칼럼만 기본키로 해 놓았지만
이제는, 생년월일이 바뀌면 생일이 바뀌므로
키가 아닌 열 ( 생년월일 ) 이 바뀔 때 또 다른 키가 아닌 열( 생일 ) 이 바뀌는
이행적 함수 종속이 발생합니다.

이럴 경우 생일 칼럼이나 생년월일 칼럼을
따로 빼내어 다른 테이블로 만들어 참조키 설정 후 연결하게되면
3NF를 만족시키는 ( 3정규형이 된 ) 테이블을 만들 수 있습니다 ^^

아... 별로 내용 없을줄 알았는데 은근히 많네 --;;;




반응형

댓글

Designed by JB FACTORY