DB 정규화 - f-lab-edu/myinsta GitHub Wiki

Nomalization 정규화

정의

  • RDBMS의 데이타 구조 설계후 사용시 업데이트, 딜리트, 인서트시 발생할수있는 문제를 없애기 위해 테이블의 구조를 조정하는 작업.

제1정규화

  • 테이블의 칼럼(열)은 하나의 값(Atomic value, 원자값)만 가질수 있다.
  • 한번에 여러 사진을 등록할수있는 어플리케이션의 데이타 베이스의 테이블
  • 사진에서 발생하는 중복을 위와 같이 등록되도록 바꾸었다.

제2정규화

  • 만약 테이블의 기본키 (primary key)가 조합키( composite key )가 아닌 단일키 (sigle key)라면 2NF는 자연스럽게 만족된다.
  • 하지만 기본키가 조합키로 되어있다면 제1정규화가 진행된 테이블이 함수종속을 만족하도록 테이블을 분해하여야 한다.
  • 후보키중 하나인 클제목이 글번호를 혼자서 결정지을수있다. 이를 없애기 위해 나누었다.

제3정규화

  • 제2정규화가 진행된 테이블에서 후보키가 아닌 애트리뷰트들에서 이행적 종속( transitive functional dependencies)을 가지지 않도록 하는것
  • 이메일이 닉네임을 정할수있고, 닉네임(애트리뷰트)이 비밀번호(애트리뷰트)를 정할수있는 이행종속의 발생. 이메일과 닉네임은 고유하다. 해서 이를 없애기 위해 나누었다.

BCNF정규화

  • 제3정규화가 진행된 테이블의 후보키가 아닌 애트리뷰트가 다른 후보키를 함수적으로 결정하면 BCNF가 아니다.
  • 출처 https://brownbears.tistory.com/542
  • 위 테이블에서 {이름, 과목명}을 기본키라고 하면, 교수(애트리뷰트)가 과목명(후보키)를 정하는 종속이 발생 BCNF가 아니다
  • 출처 https://brownbears.tistory.com/542
  • 위처럼 나눠 주어야 한다

참조