데이터베이스(DB) 정규화(1차,2차,3차)
안녕하세요.
현재 필자는 오라클 데이터베이스를 필두로 하여 데이터베이스에 대해 공부하는 중 입니다.
여러가지 Sql 쿼리문들도 있지만 이번엔 정규화에 대해서 알아보고자 합니다.
실제 개발자분들은 현업에서 실제 사용할 일이 있을지는 모르겠지만
기본 개념으로 알아두시면 좋을듯 싶습니다.
저 또한 그런 의미로 정리를 하고자 합니다.
정규화의 목적
☞ 데이터를 보다 효율적으로 저장하고, 데이터 중복을 방지하며, 저장 공간이 낭비되는 테이블 설계를 제거하기 위함
정규화를 논할때는 일반적으로 1차, 2차, 3차 정규화를 대상으로 합니다.
그럼 이제 정규화에 대해 알아보도록 하겠습니다.
1차 정규화
☞ 반복되는 속성이나 그룹의 속성을 제거하고, 새로운 테이블을 추가한 후에 기존 테이블과 일대다 관계를 형성하는 것을 의미합니다.
위의 그림은 정규화의 예시 입니다.
처음의 '직원' 테이블을 이용하게 되면 부서 이름이 직원 정보에 반복되어 저장될 것이므로 데이터의 중복이 발생합니다.
또는 '부서6'이라는 새로운 정보가 필요할때는 컬럼을 추가해야 하는 상황도 발생합니다.
테이블에 열이 빈번하게 추가되는 것은 바람직하지 않습니다.
그리고 부서이동이 없는 직원 정보에는 NULL값이 저장될 것이므로 추후에 쿼리 작성시에도 고려해야할 상활들이 발생하게 됩니다.
2차 정규화
☞ 기본키가 복합 키로 구성되었을 때, 복합 키 전체에 의존하지 않고 일부에 의존적인 열이 있으면 이를 제거해야 하는 것을 의미합니다.
'생년월일'은 '동호회코드'와는 상관이 없는 단지 '사원번호'하고만 연관된 직원 개인의 정보일 뿐입니다.
한 직원이 여러 동호회에 가입하면 생년월일 정보가 그만큼 반복되어 저장되고,
결과적으로 데이터의 중복과 저장소의 낭비가 발생한다.
3차 정규화
정의
☞ 기본 키에 의존하지 않고 일반 열에 의존하는 열이 있다면 이를 제거해야 하는 것을 의미합니다.
이런 형태의 문제점은 '부서이름' 컬럼이 '부서'테이블의 '부서코드'에 의존한다는 점 입니다.
이렇게 되면 같은 부서 직원들은 같은 부서이름을 갖게 되어 불필요한 데이터 중복과 저장소가 낭비 됩니다.
지금까지 아주 간략한 정규화에 대해 알아보았습니다.
정보처리기사시험을 준비하며 보긴봤지만 감회가 새롭네요.
즐거운하루 보내세요.
'개발 > DB' 카테고리의 다른 글
[오라클] 인덱스의 원리 및 개념과 종류(B-TREE, BITMAP INDEX) (6) | 2019.11.30 |
---|---|
오라클(oracle) pivot, unpivot 함수 활용 예제 (0) | 2019.11.14 |
오라클(oracle) rank(), row_number() 순위함수 사용 예제 (2) | 2019.11.13 |
drop, delete, truncate 차이점 및 개념 이해하기 (4) | 2019.11.06 |
파티션 종류 및 개념 알아보기(Hash Partition, List partition, composite partition) (0) | 2019.11.05 |
[오라클(oracle)] range 파티션(partition) 알아보기 (0) | 2019.10.28 |
[오라클(oracle)] sql merge 기능 설명 및 예제 (2) | 2019.10.22 |