데이터베이스 정규화의 필요성

icymunchhhiip·2021년 9월 3일
0

DB 정규화

목록 보기
1/1
post-thumbnail

정규화(Normalization)란?

정규화란 테이블을 분할하는 과정입니다.

분할하는 이유

그렇다면, 테이블을 ❓왜❓ 분할하는 것인지 필요성을 알아야겠지요?
이유는 아래와 같습니다.

  • 정보의 중복
  • 이상 현상(삽입, 삭제, 갱신)

예제를 통해 무슨 뜻인지 알아보도록 하겠습니다.
전제 사항을 우선 알려드리겠습니다.

  • 은행의 지점명, 은행이 위치하는 지점도시, 은행이 가진 자산이 있고,
  • 해당 은행의 고객명, 예금번호, 예금된 액수를 뜻합니다.
  • 같은 예금번호를 가진 것은 공동명의로, 계모임에서 함께 돈 모으는 것과 같다고 생각합시다.
  • 주 키는 고객명|예금번호입니다. 앞서 말한 공동명의로 인해 예금번호가 다른 고객일 경우에도 중복될 수 있고, 고객명 또한 동명이인의 가능성이 있기 때문입니다.
지점명지점도시자산고객명예금번호액수
범어점대구900000홍호잇A-123100
범어점대구900000김쿠키A-234200
범어점대구900000박봉봉A-234200
신촌점서울800000이구구A-456300

정보의 중복

지점명지점도시자산고객명예금번호액수
범어점대구900000홍호잇A-123100
범어점대구900000김쿠키A-234200
범어점대구900000박봉봉A-234200
신촌점서울800000이구구A-456300

같은 지점의 고객들이 늘어날 경우, 지점명, 지점도시, 자산이 계속 중복되어 저장이 되겠죠? 이미 범어점, 대구, 900000라는 같은 정보가 세 개나 저장된 것을 볼 수 있습니다.

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

삽입 이상 현상

지점명지점도시자산고객명예금번호액수
범어점대구900000홍호잇A-123100
범어점대구900000김쿠키A-234200
범어점대구900000박봉봉A-234200
신촌점서울800000이구구A-456300

삽입 이상 현상은 이름에서 유추할 수 있듯이 정보를 넣을 때 문제가 생기는 경우입니다. 만약 여기서 해운대점, 부산, 7000000이라는 은행 정보만을 추가하고 싶다고 합시다. 하지만 앞서 주 키가 고객명|예금번호라고 했습니다. 주키의 값은 null이 불가능합니다. 따라서 은행 정보만으로는 고객의 정보(주키)가 없기 때문에 넣을 수 없습니다.

삭제 이상 현상

지점명지점도시자산고객명예금번호액수
범어점대구900000홍호잇A-123100
범어점대구900000김쿠키A-234200
범어점대구900000박봉봉A-234200
신촌점서울800000이구구A-456300

삭제 이상 현상은 정보를 지울 때 문제가 생기는 경우입니다. 이것도 삽입 이상 현상과 비슷한 이유로 나타납니다.
만약 이구구씨가 예금을 없애 버렸다면 이구구, A-456,300을 지워야 할것입니다. 하지만 주키인 고객명|예금번호를 null로 둘 수 없으니 해당 행이 모두 지워집니다. 따라서 삭제를 원치 않는 신촌점에 대한 정보도 함께 사라져 버립니다.

갱신 이상 현상

지점명지점도시자산고객명예금번호액수
범어점대구900000홍호잇A-123100
범어점대구900000김쿠키A-234200
범어점대구900000박봉봉A-234200
신촌점서울800000이구구A-456300

갱신 이상 현상은 정보를 수정할 때 문제가 생기는 경우입니다. 이건 정보의 중복과 관련된 현상입니다. 범어점자산450000로 반토막이 되었다고 합시다. 그러면 자산 정보를 수정해야하는데 3번이나 중복되어 저장되었기 때문에 일일이 다 찾아서 수정해야합니다. 과하게 많은 작업이 수행되죠.

위의 예제로 아~설계 구조가 잘못 되었구나~라고 느끼셨나요? 이 문제를 해결하는 방법은 분할입니다.

결론은 잘못된 설계로 정보의 중복이상현상(삽입,삭제,갱신)가 발생하고 이에 대한 해결책은 분할이라는 것입니다.

다음에는 무손실 조인 분할, 종속성 보전 분할, 이후에는 정규화 과정으로 찾아뵙겠습니다. 읽어주셔서 감사합니다.

profile
🐣 behance.net/5c533018

0개의 댓글