- Published on
ERD 설계와 정규화
- Authors
- Name
- Chan Sol OH
목차
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을 써야하는 등 너무 많이 테이블을 쪼개는 것일 수 있다.