sol 개발 블로그 로고
Published on

ERD 설계와 정규화

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

ERD

Entity-Relationship Diagram

DB에 저장되는 객체들의 관계를 나타내는 다이어그램이다.

두 엔티티 간 1:1, 1:N, 그리고 N:M 관계를 가질 수 있다. 또한 두 엔티티를 다이어그램으로 나타낼 때 Crow's Foot(새발) 표기법을 사용할 수 있다.

새발 표기법

위 그림과 같이 엔티티는 사각형으로 나타낼 수 있고, 관계에 있어서 수량은 타원, 해쉬 마크, 그리고 까마귀 발로 표현할 수 있다.

Normalization

정규화는 관계를 분해시켜서 중복되는 데이터를 줄일 수 있고, 테이블 컬럼이 자주 변경될 때 컬럼에 자유를 줄 수 있다. 하지만, DB 명시성이 줄어들고 Join 수가 많아질 수 있다. 그래서 테이블 변경이 많이 없다면 비정규화를 사용하는 것도 나쁘지 않다.

Normalization에 사용되는 용어

  • Anomaly 문제 상황
    • 삭제 문제 특정 값이 완전히 사라지는 것, (ex, A 수업을 듣던 유일한 학생의 퇴학)
    • 삽입 문제 결정되지 않은 Null 값이 삽입되는 문제 (ex, 신입생의 주소)
    • 수정 문제 모두 수정되어야하는 경우 (ex, 학생이 전화번호를 바꿨을 때, 기존 학생들의 전화번호부)
  • Functional Dependancy 함수 의존성
    • 결정자(ID) -> 종속자 (ID외 Attributes) = 종속관계
    • 한 테이블 안에서 여러 종속관계들을 뽑아낼 수 있음

Normalization 단계

정규화는 관계를 분해하는 것

  • 제 1 정규형 (1NF)
    • 1 컬럼 필드는 1 값
  • 제 2 정규형 (2NF)
    • 결정자(기본키)가 아닌 모든 속성이 결정자에 함수 종속
    • 결정자가 여러 속성일 수 있음 (ex, 학생 번호와 교과 번호 -> 학점)
  • 제 3 정규형 (3NF)
    • 기본키 이외의 속성이 다른 속성을 결정할 수 없음
    • 이행적 종속 분리
    • X -> Y, Y -> Z, X -> Z 와 같은 구조라면, X -> Y, Y -> Z 이렇게 테이블을 분리해서 Y를 기본키로 만들어준다.
  • BCNF
    • 모든 결정자가 항상 후보키가 되도록 분해
    • 데이터를 얻기위해 join을 써야하는 등 너무 많이 테이블을 쪼개는 것일 수 있다.