정규화 - 이상 현상

dragonappear·2023년 7월 12일

Database 101

목록 보기
6/10


이상 현상

잘못된 DB 설계

  • 데이터베이스를 잘못 설계하면 한 테이블에 2개 혹은 여러개의 관심사가 위치하게 된다.
  • 이렇게 되면 한 테이블에는 중복된 데이터가 많아지고, null 값을 많이 사용하게 된다.

중복된 데이터이 많으면 안좋은 점

  1. DB 저장 공간을 낭비한다.
  2. 실수로 인한 데이터 불일치가 발생할 수 있다.

null을 많이 사용하면 안좋은 점

  • 예상과 다른 결과 발생
    • nullunknown,withheld,not applicable 의미를 가지는데, null을 포함한 연산을 하면 예상치 못한 결과가 발생할 수 있다. 왜냐하면 SQL에서 null과의 비교 연산 시 그 결과는 unknown 이기 때문이다.
    • ex) v NOT IN(v1,v2,v3) (v!=v1 && v!=v2 && v!=v3) 연산을 수행할때 v1,v2,v3 중에 하나가 null 이라면?
    • unknown 이 되기 때문에 WHERE 절은 조건식의 결과가 true인 튜플들만 선택되기 때문에 아무것도 선택되지 않는다.
  • 불필요한 storage 낭비
  • aggregate function 사용시 주의 필요

잘못된 설계의 예시이다.

해당 테이블은 직원 정보와 부서 정보가 같이 위치한다.

이 테이블에 데이터를 manipulate 했을 때 발생할 수 있는 이상 현상을 알아보자.

삽입 이상

잘못된 테이블 설계에 데이터를 추가하면

  1. 불필요한 데이터도 함께 삽입
  2. 중복 데이터 발생
  3. 삽입 불가 등

이상현상이 발생한다.

갱신 이상

실수로 인해서 dev 부서 이름을 dev1으로 변경했을때 호날두만 업데이트 되었다면 데이터 불일치 발생

삭제 이상

이강인 정보를 삭제하면 QA 부서 정보 자체가 삭제된다.

가짜 튜플

사진 촬영 회사의 DB를 구축하는데 아래와 같이 구성되었을 때

두 개의 테이블을 Natural Join 했을 때, 4개의 튜플을 기대하였으나, 2개의 튜플이 추가된 결과가 나온다.

올바른 DB 스키마 설계

  1. 관심사가 관련있는 속성들끼리 테이블 구성
  2. 중복 데이터를 최대한 허용하지 않게 설계
  3. Join 수행 시 가짜 데이터가 생기지 않게 설계
  4. 되도록이면 null 값을 줄일 수 있는 방향으로 설계

0개의 댓글