[DB] 정규화의 필요성 및 개념

Onam Kwon·2023년 1월 4일
0

DB

목록 보기
7/11

DB 정규화의 필요성

  • 정규화(Normalization)란 중복된 데이터 방지, 부모와 자식 데이터 간의 논리적 관계 유지, 에러 감소 및 재개발 비용 감소 등을 위해 존재한다.
  • 어려운 말로는, 테이블 간 중복된 데이터를 줄이며 데이터 무결성을 개선하기 위해 정규화 단계에 따라 관계형 데이터 베이스를 구조화 하는 과정이다.
    • 데이터 무결성이란 데이터의 정확성, 일관성, 유효성이 유지되는 것을 뜻한다.
      • 데이터의 정확성: 데이터의 중복이나 누락이 없는 상태.
      • 데이터의 일관성: 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태.
    • 따라서 이를 해결하기 위해 정규화 라는 과정을 거치며 이는 단계별로 존재한다.
  • 단계는 여러가지가 있으며 특정 단계는 그 이전 단계의 조건을 모두 만족시켜야 한다.
    • 보통 3NF나 그 다음단계까지 적용한다고 들었으며, 너무 많은 정규화 작업은 JOIN으로 인해 성능저하를 야기할 수 있다함.

DB의 잘못된 설계의 문제점

  • 잘못 설계된 데이터 베이스는 여러가지 문제점을 가지고 있으며 이는 아래와 같다.
  • 데이터의 중복 발생
  • 이상현상 발생
    • 삽입이상
    • 삭제이상
    • 갱신이상
E_NAMESSNB_DATEADDRESSD_NUMBERD_NAMED_MANAGER
  • 위와 같이 사원정보와 부서에 관한 정보를 가지고 있는 테이블 EMP_DEPT가 있다.
  • 우리는 이 테이블에서 SSN(주민등록번호)가 기본키라는 것을 알 수 있고, 또한 아래와 같은 관계를 확인할 수 있다.
    • SSN -> E_NAME, B_DATE, ADDRESS, D_NUMBER를 결정한다.
      • 주민등록번호만 있으면 이름, 생일, 주소, 부서번호 확인 가능.
    • D_NUMBER -> D_NAME, D_MANAGER를 결정한다.
  • 하나의 테이블에 두개의 주제가 포함되어있는 상황.

삽입이상

E_NAMESSNB_DATEADDRESSD_NUMBERD_NAMED_MANAGER
  • 위 상황에서 새로운 부서만을 넣고싶을때, 사원의 정보가 없다면 삽입할 수가 없다.
    • 부서만 따로 삽입 불가능
      • 기본키인 SSN가 없기 떄문.
  • 이런 상황을 삽입이상이라고 부른다.
E_NAMESSNB_DATEADDRESSD_NUMBER

D_NUMBERD_NAMED_MANAGER
  • 하지만 이처럼 테이블을 분리해 관리한다면, SSN가 없어도새로운 부서만 추가할 수 있다.

삭제이상

E_NAMESSNB_DATEADDRESSD_NUMBERD_NAMED_MANAGER
Person1123-123-1234001Department1Manger_name
  • 위와 같은 상황이 있다고 할 때, 마지막 사원인 Person1이라는 사람이 나가버리면 해당 부서도 사라져 버리는 상황이 발생한다.
  • 이런 상황을 삭제이상이라고 부른다.
E_NAMESSNB_DATEADDRESSD_NUMBER
Person1123-123-1234001

D_NUMBERD_NAMED_MANAGER
001Department1Manger_name
  • 이처럼 테이블을 분리한다면 마지막 사원이 사라져도 부서에 관한 정보는 그대로 유지할 수 있다.

갱신이상

E_NAMESSNB_DATEADDRESSD_NUMBERD_NAMED_MANAGER
Person1123-123-1234001Department1Manger_name
Person2223-123-1234001Department1Manger_name
............001Department1Manger_name
Person99423-123-1234001Department1Manger_name
Person100523-123-1234001Department1Manger_name
  • 위와 같은 상황이 있다고 할 때, 부서 이름을 Department1에서 Dev팀으로 바꾸려면 전부 바꿔야 하는 상황이 일어난다.
    • 이는 인원이 많을수록 비효율 적이며 이러한 상황을 갱신이상 이라고 한다.
  • 테이블을 아래와 같이 분리한다면 효율적으로 관리할 수 있다.
E_NAMESSNB_DATEADDRESSD_NUMBER
Person1123-123-1234001
Person2223-123-1234001
............001
Person99423-123-1234001
Person100523-123-1234001

D_NUMBERD_NAMED_MANAGER
001DevManger_name
  • 위와같이 테이블을 나눈다면 아래 테이블에서 D_NAME컬럼 값 하나만 변경해 줄 수 있다.
  • 지금까지 데이터베이스 정규화의 필요성에 대해 알아봤으며, 여기를 클릭하면 정규화의 과정에 대해 알 수 있다.
profile
권오남 / Onam Kwon

0개의 댓글