정규화란 테이블을 분할하는 과정입니다.
그렇다면, 테이블을 ❓왜❓ 분할하는 것인지 필요성을 알아야겠지요?
이유는 아래와 같습니다.
예제를 통해 무슨 뜻인지 알아보도록 하겠습니다.
전제 사항을 우선 알려드리겠습니다.
지점명
, 은행이 위치하는 지점도시
, 은행이 가진 자산
이 있고,고객명
, 예금번호
, 예금된 액수
를 뜻합니다.고객명|예금번호
입니다. 앞서 말한 공동명의로 인해 예금번호
가 다른 고객일 경우에도 중복될 수 있고, 고객명
또한 동명이인의 가능성이 있기 때문입니다.지점명 | 지점도시 | 자산 | 고객명 | 예금번호 | 액수 |
---|---|---|---|---|---|
범어점 | 대구 | 900000 | 홍호잇 | A-123 | 100 |
범어점 | 대구 | 900000 | 김쿠키 | A-234 | 200 |
범어점 | 대구 | 900000 | 박봉봉 | A-234 | 200 |
신촌점 | 서울 | 800000 | 이구구 | A-456 | 300 |
지점명 | 지점도시 | 자산 | 고객명 | 예금번호 | 액수 |
---|---|---|---|---|---|
범어점 | 대구 | 900000 | 홍호잇 | A-123 | 100 |
범어점 | 대구 | 900000 | 김쿠키 | A-234 | 200 |
범어점 | 대구 | 900000 | 박봉봉 | A-234 | 200 |
신촌점 | 서울 | 800000 | 이구구 | A-456 | 300 |
같은 지점의 고객들이 늘어날 경우, 지점명
, 지점도시
, 자산
이 계속 중복되어 저장이 되겠죠? 이미 범어점, 대구, 900000
라는 같은 정보가 세 개나 저장된 것을 볼 수 있습니다.
지점명 | 지점도시 | 자산 | 고객명 | 예금번호 | 액수 |
---|---|---|---|---|---|
범어점 | 대구 | 900000 | 홍호잇 | A-123 | 100 |
범어점 | 대구 | 900000 | 김쿠키 | A-234 | 200 |
범어점 | 대구 | 900000 | 박봉봉 | A-234 | 200 |
신촌점 | 서울 | 800000 | 이구구 | A-456 | 300 |
삽입 이상 현상은 이름에서 유추할 수 있듯이 정보를 넣을 때 문제가 생기는 경우입니다. 만약 여기서 해운대점, 부산, 7000000
이라는 은행 정보만을 추가하고 싶다고 합시다. 하지만 앞서 주 키가 고객명|예금번호
라고 했습니다. 주키의 값은 null이 불가능합니다. 따라서 은행 정보만으로는 고객의 정보(주키)가 없기 때문에 넣을 수 없습니다.
지점명 | 지점도시 | 자산 | 고객명 | 예금번호 | 액수 |
---|---|---|---|---|---|
범어점 | 대구 | 900000 | 홍호잇 | A-123 | 100 |
범어점 | 대구 | 900000 | 김쿠키 | A-234 | 200 |
범어점 | 대구 | 900000 | 박봉봉 | A-234 | 200 |
신촌점 | 서울 | 800000 | 이구구 | A-456 | 300 |
삭제 이상 현상은 정보를 지울 때 문제가 생기는 경우입니다. 이것도 삽입 이상 현상과 비슷한 이유로 나타납니다.
만약 이구구
씨가 예금을 없애 버렸다면 이구구, A-456,300
을 지워야 할것입니다. 하지만 주키인 고객명|예금번호
를 null로 둘 수 없으니 해당 행이 모두 지워집니다. 따라서 삭제를 원치 않는 신촌점
에 대한 정보도 함께 사라져 버립니다.
지점명 | 지점도시 | 자산 | 고객명 | 예금번호 | 액수 |
---|---|---|---|---|---|
범어점 | 대구 | 900000 | 홍호잇 | A-123 | 100 |
범어점 | 대구 | 900000 | 김쿠키 | A-234 | 200 |
범어점 | 대구 | 900000 | 박봉봉 | A-234 | 200 |
신촌점 | 서울 | 800000 | 이구구 | A-456 | 300 |
갱신 이상 현상은 정보를 수정할 때 문제가 생기는 경우입니다. 이건 정보의 중복과 관련된 현상입니다. 범어점
의 자산
이 450000
로 반토막이 되었다고 합시다. 그러면 자산
정보를 수정해야하는데 3번이나 중복되어 저장되었기 때문에 일일이 다 찾아서 수정해야합니다. 과하게 많은 작업이 수행되죠.
위의 예제로 아~설계 구조가 잘못 되었구나~라고 느끼셨나요? 이 문제를 해결하는 방법은 분할입니다.
결론은 잘못된 설계로 정보의 중복과 이상현상(삽입,삭제,갱신)가 발생하고 이에 대한 해결책은 분할이라는 것입니다.
다음에는 무손실 조인 분할, 종속성 보전 분할, 이후에는 정규화 과정으로 찾아뵙겠습니다. 읽어주셔서 감사합니다.