데이터 베이스를 설계할 때 데이터의 중복이 발생하면, 이상 현상이 생깁니다. 그래서 데이터의 중복을 최소한으로 줄여 이상현상을 줄이게 되는 것을 정규화 라고합니다.
- 이상현상( 삽입 이상, 삭제 이상, 갱신 이상)
제 입장에서 이해하기 쉽게 설명하겠습니다.
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 | 과목 |
과목 | 과목코드 |
로 정규화를 시키면 된다.
'DATABASE' 카테고리의 다른 글
태태개발일지 - DB 관계 데이터 모델링 (4) | 2024.10.06 |
---|---|
태태개발일지(sql) (0) | 2023.12.15 |
태태개발일지(DB 프로시저) (0) | 2023.11.22 |
태태개발일지(mysql) (0) | 2023.11.10 |
태태개발일지(데이터베이스 설계단계 ERD) (1) | 2023.10.10 |