정규화를 해야 하는 이유는 잘못된 테이블 설계로 인해 Anomaly(이상 현상)가 나타나기 때문이다. Anomaly란 무엇인가?
- 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
- 아래 릴레이션을 보고 이상 현상을 파악해보자
(이벤트참여 릴레이션)
- 릴레이션에 새 데이터를 삽입하려면 불필요한 데이터도 함께 삽입해야 하는 문제
- 예) 위 그림의 이벤트에 참여하지 않은 아이디가 'melon'이고 이름이 '성원용' 등급이 'gold'인 신규 고객의 데이터는 이벤트참여 릴레이션에 삽입할 수 없음
- 삽입하려면 실제로 참여하지 않은 임시 이벤트번호를 삽입해야 한다
- 릴레이션의 중복된 튜플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 문제
- 예) 아이디가 'apple'인 고객의 등급이 'gold'에서 'vip'로 변경되었는데, 일부 튜플에 대해서만등급이 수정된다면 'apple'고객이 서로 다른 등급을 가지는 모순이 발생
- 릴레이션에서 튜플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제
- 예) 아이디가 'orange'인 고객이 이벤트 참여를 취소해 관련 튜플을 삭제하게 되면 이벤트 참여와 관련이 없는 고객아이디, 고객이름, 등급 데이터까지 손실됨
삽입, 갱신, 삭제 이상은 정규화가 되지 않은 테이블에서 발생하는 현상들이다. 즉 테이블이 정규화를 통해 분리되지 않아 데이터를 조작함에 따라 문제가 발생하는 것이다. 만약 테이블이 이벤트 참여에 대한 정보와 회원 정보가 혼합되어 있을 때, 어떤 회원이 회원가입을 한다면 "이벤트번호"라는 컬럼에 null을 삽입해야 한다. 또한 A라는 고객이 두 번 이벤트에 참여하여 두 레코드가 들어있을 때, 고객의 등급을 바꿔야 된다고 해보자. 그런데 하나의 레코드만 수정한다면 데이터가 불일치하게 되는 모순이 발생한다. 마지막으로 B라는 고객이 이벤트참여를 취소해서 레코드를 삭제하게 된다면 회원정보라는 삭제를 원하지 않는 데이터까지 연쇄 삭제되는 문제가 발생한다. 이러한 데이터 불일치 현상인 이상현상들을 정규화를 통해 해결할 수 있다



