DATABASE

태태개발일지(정규화)

태태코 2023. 11. 27. 10:29
반응형

데이터 베이스를  설계할 때 데이터의 중복이 발생하면, 이상 현상이 생깁니다. 그래서 데이터의 중복을 최소한으로 줄여 이상현상을 줄이게 되는 것을 정규화 라고합니다.

 

- 이상현상( 삽입 이상, 삭제 이상, 갱신 이상)

 

제 입장에서 이해하기 쉽게 설명하겠습니다.

 

 

1NF(1정규형)

원자성을 의미합니다.

이름 취미
박땡땡 농구
김철땡 축구, 미식축구

 

원자성: 더 이상 분해될 수 없고, 쪼갤 수 없는 값을 의미합니다.

즉 테이블에서 행과 열의 값을 고유 원자값으로 표현해 주면 됩니다.

 

즉 김철땡의 취미가 축구, 미식축구 이렇게 여러개의 값이 들어 있는 것을 볼 수 있는데,

이 값들은 쪼갤 수 있는 원자값이 아니기 때문에 1정규형을 만족시키기 위해서 바꿔야합니다.

 

 

이름 취미
박땡땡 농구
김철땡 축구
김철땡 미식축구

 

이렇게 된다면, 1정규형을 만족시킵니다.

 

 

2NF(제 2정규형)

사용자ID 취미 수강료
1 농구 500000
2 축구 400000

 

이렇게 보았을 때 사용자를 기준으로 사용자에 대한 취미는 한 테이블에 넣어도 되지만, 수강료에 대한 속성은 굳이 사용자 테이블에 넣을 필요가 없습니다.

 

만일 사용자 ID 1번이 농구라는 취미를 가졌는데 수강료가 1번 행과 다르다면, 그것도 문제가 생길 수 있기 때문에.

여기서 말하는 부분함수 종속을 제거한다는 말은.

 

테이블의 기본키에 모든 컬럼에 종속을 해야 된다.  즉 *기본키 중 어떤 컬럼에도 종속되지 않은 컬럼이 있다면 * 제 2 정규화를 실행 시켜야한다.

 

만일 기본키가 사용자ID, 취미였다면 수강료는 취미에 종속이 되지만, 수강료와 사용자ID는 관계가 없음으로 완전 함수 종속이 아니라 정규화를 시켜야한다는 의미입니다.

 

사용자ID 취미
1 농구
2 축구

 

 

취미 수강료
농구 500000
축구 400000

 

 

이렇게 하면 제2 정규화에 만족하는 값입니다.

 

 

3NF(제 3정규형)

 

2정규화랑 비슷한 내용이지만 A->B B->C A->C 이행함수를 없애야 정규화가 된다는 뜻입니다.

 

쉽게 설명하자면

만일 

 

사람ID 과목 과목코드

 

이런 상황이라면 사람ID -> 과목, 과목-> 과목코드 사람ID -> 과목 코드가 되기때문에

 

사람ID 과목

 

과목 과목코드

로 정규화를 시키면 된다.

반응형