정규화, 비정규화 정리

Simple is Best·2021년 6월 13일
0

database

목록 보기
2/2

1. 정규화

  • RDB 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화 라고 합니다.
  • RDB 정규화의 목표는 이상이 있는 관계를 작고 잘 조직된 관계를 생성하는 것에 있습니다.
  • 위와 같이 정규화를 통해 테이블을 정비하고 이를 통해 RDB 나머지 부분들로 전파되게 하는 것이 목표입니다.
  • 정규화를 잘못지킬 경우 이상현상이 발생하며, 갱신, 삭제, 삽입 이상이 있습니다.

1.1 정규화 - 1NF

  • 하나의 컬럼에 중복이 없어야 합니다.
  • 해결 방법은 중복이 있는 컬럼을 분리 시켜서, 테이블을 분리합니다.
  • ID 1개에 PHONE_NO 가 여러개면 ID 를 관리하는 테이블 1개, PHONE_NO 를 관리하는 테이블 2개로 분리합니다.

1.2 정규화 - 2NF

  • 기본키의 부분집합이 다른 컬럼의 값을 결정해서는 안됩니다.
  • 예를 들면, 주민등록번호와 성별이 복합키라 가정하고, 나이, 이름 컬럼을 가지는 테이블이 있다고 가정하겠습니다. (예시가 생각안나서 좀 이상하게 잡았습니다)
  • 주민등록번호만으로 나이, 이름을 결정지을 수 있으니 이는 정규화 규칙에 위배됩니다.
  • 이를 해결하기 위해 테이블 2개로 분리합니다.

1.3 정규화 - 3NF

  • 기본키 이외의 다른 컬럼이 그 외 다른 컬럼을 결정할 수 없는 것입니다.
  • 예를 들면, Student_id, Student_name, Street, city, State, Zip 이 컬럼을 가진 테이블이 있다고 가정하겠습니다.
  • 기본키는 Student_id 이며, Zip 컬럼의 값이 정해지면, Street, City, State 값도 자동으로 정해 집니다.
  • 테이블을 분리하는게 해결책입니다. Student 테이블, Address 테이블

1.4 정규화 - BCNF

  • 3차 정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형입니다.
  • 결정자란 하나의 컬럼이 다른 컬럼을 결정한다는 것입니다. 후보키 집합이란 기본키가 될 수 있는 후보입니다.
  • 여기서는 후보키 집합이 아닌데 결정자가 된 예시를 소개하겠습니다.
  • 예를 들면, 학생, 강의, 강사가 있다고 가정하겠습니다.
    • 학생, 강의가 기본키가 될 수 있습니다. 그런데 여기서 강사가 있으면 강의를 결정지어버립니다. (후보키가 아닌 컬럼이 다른 컬럼을 결정지음)
    • 강사와 강의를 분리시켜줘야 합니다. 이상 현상이 생길수있으니
    • 강사, 강의 테이블 / 학생, 강의 테이블로 분리

2. 비정규화

  • 정규화 후, 조회 성능을 향상시키기 위해 데이터를 중복하거나 그룹핑하는 과정입니다.
  • 비정규화의 예로는 그룹에 대한 합계를 테이블에 저장 or 자주 조인하여 사용하는 컬럼을 테이블안에 중복해서 넣어놓는 것이 있습니다.

3. reference

profile
Simple is best

0개의 댓글