정규화

JunYoungK·2024년 9월 11일
0

OLTP와 OLAP에 대한 내용들을 정리하면서 데이터 모델링에 대한 내용도 같이 정리하였다.
이번 게시글은 OLTP에서 주로 사용하는 데이터 모델인 정규형들에 대해 다루며, 자료들은 데브코스 개인 발표 때 직접 만든 PPT를 이용하였다.


정규화의 정의와 목적

정규화는 데이터베이스의 데이터를 구조화하는 프로세스

  • 데이터 중복 제거
  • 데이터 무결성 향상
  • 삽입, 삭제, 갱신 이상 방지
  • 데이터베이스 구조의 유연성 증가
  • 주로 OLTP에서 사용하는 데이터 모델
    • OLTP에서는 데이터 삽입, 삭제, 갱신이 빈번하게 일어나기 때문

데이터의 이상 현상

삽입 이상

  • 새로운 데이터를 삽입할 때 의도하지 않은 정보까지 함꼐 추가해야하는 문제
  • 예: 학생 정보를 추가하려면 해당 학생이 수강하는 과목 정보도 반드시 함께 입력해야하는 경우

갱신 이상

  • 데이터 수정시 일부만 변경되어 데이터의 불일치가 발생하는 문제
  • 예: 학생의 전공을 변경할 때 여러 레코드를 동시에 수정하지 않으면 일관성이 깨지는 경우

삭제 이상

  • 데이터 삭제시 의도치 않은 정보까지 함께 삭제되는 문제
  • 예: 학생의 수강 정보를 삭제하면 해당 학생의 기본 정보까지 모두 사라지는 경우

→ 이러한 이상 현상들은 테이블을 적절히 분리하고 정규화함으로써 해결할 수 있음

정규형

여기서는 제3 정규형까지만 다룸

제1 정규형

  • 모든 속성은 반드시 하나의 값만 가져야 한다.
    이름생년월일직업
    이지은19930516배우, 가수, 작곡가
    • 직업 속성으로 해당 컬럼을 검색시 찾기가 힘듬
  • 따라서 아래의 두개 테이블로 수정함으로써 제1 정규형을 만족
    이름생년월일
    이지은19930516
    이름직업
    이지은배우
    이지은가수
    이지은작곡가
  • 유사한 속성이 반복되는 경우도 1차 정규화 대상임
    이름생년월일사이트1사이트2사이트3
    이병헌19700712인스타그램페이스북싸이월드
    이민정19820216인스타그램NULLNULL
    • 없는 값은 NULL로 채워야하는 공간 낭비가 있음

제2 정규형

  • 릴레이션의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야함.
    • 단일 식별자인 경우에는 고려하지 않음

2NF-example.png

  • 위 사진의 왼쪽 테이블은 일반 속성인 음료명이 주식별 중 음료코드 속성에만 종속
    • 주문되지 않은 음료는 입력을 할 수가 없음(삽입 이상)
    • 음료명이 바뀔시 해당 음료를 주문한 주문 데이터가 모두 바뀌어야함(갱신 이상)
    • 두번째 주문 행을 삭제시 카페라떼라는 커피는 아예 데이터에서 없어짐(삭제 이상)
  • 이를 해소하는 것이 제2 정규화

제3 정규형

  • 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

3NF-example.png

  • 일반 속성인 과목명이 다른 일반속성인 과목코드 속성에도 종속
    • 과목명이 바뀔시 해당 과목을 포함하는 모든 수강신청 기록을 변경해야함(갱신 이상)
    • 첫번째 수강신청 행을 삭제시 데이터베이스 과목 데이터는 아예 없어짐(삭제 이상)
    • 새로운 과목을 추가하기 위해서는 학번 데이터가 필요함(삽입 이상)
  • 이를 해소하는 것이 제3 정규화

0개의 댓글