728x90
반응형

DataBase 설계 시 고려해야 하는 것 중엔 정규화와 비정규화(역정규화)가 있다.

정규화

  • 데이터 중복을 최소화하고 무결성을 유지하는 과정

장점

    • 데이터 모델을 여러 작은 테이블로 분해
  • 각 테이블이 하나의 주제에 집중하도록 설계
  • 데이터 중복 줄이고, 업데이트 이상 현상 방지
    • 저장 공간 효율적, 데이터 무결성 보장
    • 데이터베이스 구조의 단순화
    • 데이터 간의 관계가 명확해짐

단점

  • 그러나 과도한 정규화는 쿼리 복잡도 증가시킴 (JOIN)
  • 성능 저하도 가능

정규화 과정

제 1 정규화 (1NF)

  • 테이블의 칼럼이 원자값(Atomic Value: 하나의 값)을 갖도록 테이블 분해
    • 각 칼럼이 하나의 속성만을 가져야 함
    • 하나의 칼럼은 같은 종류나 타입의 값을 가져야 함
    • 각 칼럼이 유일한 이름을 가져야 함
    • 칼럼의 순서가 상관없어야 함
이름 나이 수강과목
홍길동 20 C,C++
이순신 21 Java
이도 34 DB, 운영체제

에서

이름 나이 수강과목
홍길동 20 C
홍길동 20 C++
이순신 21 Java
이도 34 DB
이도 34 운영체제

제 2정규화(2NF)

  • 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 분해하는 것
  • 부분적 종속: 기본키 중에 특정 칼럼에 종속되는 것
  • 완전 함수 종속: 기본키의 부분집합이 결정자가 되어선 안됨을 의미
  • 조건
    • 제 1 정규화를 만족해야함
    • 모든 칼럼이 부분적 종속이 없어야 함.
    • 모든 칼럼이 완전 함수 종속을 만족해야 함
이름 수강과목 강사명 성적
홍길동 C 광해군 95
홍길동 C++ 선조 100
이순신 Java 선조 70
이도 DB 세종 80
이도 운영체제 태종 85
  • 특정 학생의 성적을 알기 위해선 이름과 수강과목을 알아야 함
  • 특정 과목의 강사는 과목명만 알면 알 수 있다.
  • 위 테이블의 기본키는 이름과 과목으로, 복합키이다.
  • 반면 지도교수 칼럼은 과목에만 종속되므로, 제 2정규화를 만족하지 않음
이름 수강과목 성적
홍길동 C 95
홍길동 C++ 100
이순신 Java 70
이도 DB 80
이도 운영체제 85
강사명 수강과목
광해군 C
선조 C++
선조 Java
세종 DB
태종 운영체제

으로 테이블을 나눈다는 의미


제 3정규화

  • 이행적 종속(Transitive Dependencies) 을 없애도록 테이블을 분해함
  • 이행적 종속: A -> B, B -> C이 성립할 때, A -> C이 성립함을 의미함
  • 조건
    • 제 2 정규화를 만족해야 함
    • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
ID 등급 할인율
101 VIP 70%
102 Gold 40%
103 Bronze 20%
  • 이렇게 데이터가 있으면, ID 를 통해 할인율을 알 수 있다
    • 따라서 제 3정규형을 만족하지 않는다.
ID 등급
101 VIP
102 Gold
103 Bronze
등급 할인율
VIP 70%
Gold 40%
Bronze 20%

BCNF (Boyce-Codd Normal Form)

  • 제 3정규형을 좀 더 강화한 버전
  • 조건
    • 제 3정규형을 만족해야 함
    • 모든 결정자가 후보키 집합에 속해야 함
      • 후보키 집합에 없는 칼럼이 결정자가 되어선 안된다는 의미
이름 수강과목 지도교수
홍길동 C 광해군
홍길동 C++ 선조
이순신 Java 선조
이도 DB 세종
이도 운영체제 태종
* 강사의 이름을 이름과 과목으로 조회할 수 있다.
* 그러나 같은 과목을 다른 강사가 가르칠 수 있기 때문에, 수강과목 -> 지도교수 이란 종속은 성립하지 않음
* 하지만 지도교수 -> 수강과목이라는 종속은 성립
이름 지도교수
홍길동 광해군
홍길동 선조
이순신 선조
이도 세종
이도 태종
지도교수 수강과목
광해군 C
선조 C++
선조 Java
세종 DB
태종 운영체제
으로 나눌 수 있다.

제 4정규화

  • 일반적으로 BCNF 정규화까지만 함
728x90
반응형

+ Recent posts