데이터모델링
- 데이터 모델링이란 구축할 DB 구조를 약속된 표기법에 의해 표현하고 설계해 나가는 과정을 의미
데이터모델링 단계
- 개념적 데이터 모델링
- ERD 다이어그램을 통해 데이터베이스의 구조를 시각화
- 이 단계는 추상화된 DB구조를 그리는 것이므로, 필요시 생략 가능
- 논리적 데이터 모델링
- 구체적으로 데이터베이스 설계. 각 데이터의 타입, 관계, key등을 지정
- 엑셀 또는 ERD 사용
- 물리적 데이터 모델링
- 실제 데이터베이스를 만드는 과정이고, SQL 작성이 여기에 해당
개념적 데이터 모델링
- ERD (Entity Relationship Diagram)란 'Entity 개체'와 'Relationship 관계'를 중점적으로 표시하는 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램
- 외래키는 별도의 속성으로 안넣는 것이 일반적
개념적 데이터 모델링 - 관계표시
mandatary, optional 키워드는 항상 상대방 엔티티의 입장
-
1 to many
- 1 mandatary to many optional
- 게시글은 반드시 글쓴이를 가지나, 회원들은 반드시 글을 써야할 필요가 없음

- 1 optional to many optional
- 게시글은 글쓴이가 있을수도, 없을수도 있고, 회원들도 반드시 글을 쓸 필요는 없음

- 1 optional to many mandatary
- 회원이 생성되면 반드시 글을 써야하지만, 게시글중에는 글쓴이가 없는 익명글도 있음

논리적 데이터 모델링
- 개념적인 데이터 모델이 완성되면, 구체화된 업무 중심의 데이터 모델을 설계
- 이 단계에서 업무에 대한 Key, 속성, 관계등 구체화된 정보를 표시
물리적 데이터 모델링
- 최종적으로 데이터 베이스에 실제 테이블을 만드는 SQL문 작업
테이블 간의 참조 관계의 종류
- 1:1관계
- 한 테이블의 레코드가 다른 테이블의 레코드 하나와만 관련
- author테이블과 author_address 테이블로 분리 가능
- n:m관계
- 만약 여러 author가 posting 글 1개를 공동 작성할 수 있다면 n:m 관계
- post의 author_id가 multi가 되므로, author_id를 문자열로 하여 여러개 두는 것은 가능.
- 그러나 정규화가 되지 않는 문제 발생
- 해결책
- 연결테이블을 만들어 1:n, n:1 관계로 풀어주는 것이 일반적인 해결책
- post_author 와 같은 테이블 생성
- post_author는 post와 n:1관계, author와 n:1관계
정규화
- 정규화 순서 쉽게 외우기
- 도부이결다조
- 원자값이 아닌 도메인 분해
- 부분적 함수 종속 제거
- 이행적 함수 종속 제거
- 결정자이면서 후보키가 아닌 것 제거
- 다치 종속제거
- 조인 종속성 이용
하지만 실무에서 정규화 모든 단계를 따져가서 일을 하지 않기에 주요한 내용만을 다룰 예정
함수적 종속성
- f(x)=y
- 함수적 종속이라는 표현은 수학의 함수에서 유래
- y는 x의 값에 의해 결정되는 관계로서, y는 x에 종속적이고, 이를 수학적인 표현에서는 y는 x에 함수종속적이다 라고 표현
- 정규화 관련해서 빈번히 사용되는 표현으로서, a가 b에 함수종속적이다 하면 b의 값에 의해 a가 결정됨을 의미
예시)
- 학번과 학부
- 학번 -> 학부
- 즉, 학번에 따라 학부가 결정되므로, 학부는 학번에 함수 종속적
- 등록금과 학부
- 학부 -> 등록금
- 학부에 따라 등록금이 결정되므로, 등록금은 학부에 함수 종속적
1차 정규화(도메인 분해)
- 모든 열의 값이 원자적이어야 함. 즉, 각 열에는 하나의 값만 있어야 함을 의미
- 하나의 컬럼에 여러 원자값이 존재시, 조회조건을 통한 조회 어려움 발생
- 수정/삭제가 발생할때 특정 데이터를 찾아 수정/삭제의 어려움
- FK 및 index 지정이 불가능함
- 즉, 1차 정규화는 여러 원자값의 컬럼을 쪼개는 과정
2차 정규화(부분종속 제거)
- 기본키가 아닌 모든 속성이 기본키에만 완전 함수 종속된 상태를 의미
- 복합키로 이루어진 기본키 중에 특정 키에도 종속적이면 2차 정규화가 안된 상황
- 즉, 기본키에 종속적이지 않은 속성 분리
- 2차 정규화를 위한 방법
- 기본키가 아닌 키에 부분적으로 종속돼 있는 특정 컬럼값을 제거
- 기본키에 종속적이지 않다면 해당 테이블에 어울리지 않는 컬럼이라는 생각 필요
- 사실상 해당 테이블에 어울리지 않는 컬럼 분리 작업
- 불필요한 컬럼을 제거하면 공간 효율적
3차 정규화(이행종속(transitive depency)제거)
- X ->Y 이고 Y->Z 이면 X->Z 가 성립. Z가 X에 이행적으로 함수 종속
- 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 함
- 즉, 이행종속이 되는 부분종속을 제거해야 하는 특성상, 부분종속과 구분 이 어려운 부분
- 만약 학번이 PK. pk -> 학부, 학부 -> fees. 즉, pk -> fees가 되어 fees가 pk에 이행종속적
BCNF
- 결정자이면서 후보키가 아닌 것을 제거
- 후보키 집합에 속하지 않은 결정자가 존재하면 BCNF위반
- 후보키란 테이블내에 유일성을 가질 수 있는 key 중 하나
- BCNF (Boyce and Code Normal Form)은 제 3 정규형을 조금 더 강화시킨 개념이다.
다치 종속 제거 (4NF)
- 다치 종속성 (MULtiValued Dependency, MVD)이란 하나의 릴레이션에서 여러 속성과의 관계가 1:N 관계인 경우
- A ->-> B 이중 화살표로 표시
조인 종속성 제거 (5NF)
- 조인종속성이란 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것