* DB 모델링 절차
* ERD 관계도 ?
테이블과 테이블의 관계가 아니라 테이블 내부의 데이터와 데이터 간의 관계에 따라
1대다, 1대1, 다대다 관계가 성립하는 것이다.
# 제 1정규화 (원자성 만족)
- 정규화? 데이터 중복을 찾아내어 별도의 테이블로 데이터를 분리시키는 것.
- 중복 데이터 또는 중복 컬럼을 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.
- 데이터를 참조 하는 테이블이 자식테이블이고, 데이터를 갖고 있는 테이블이 부모 테이블이다.
- 자식 테이블에서는 부모 테이블의 데이터를 가리키기 위해 그 데이터의 pk값을 보관해야 한다.
- 부모-자식 테이블을 식별하기 애매할 때 1 : 다 관계에서 1 쪽이 부모 테이블이다.
- 이렇게 부모 테이블의 데이터에 대해 PK값을 저장하는 컬럼을 외부키(FK)라 부른다.
- 중복 컬럼? 사진1, 사진2, 사진3
- 중복 데이터? 교육센터명, 부서명, 은행명, ...
<기존>
<제1정규화 과정>
제 3정규화 (이행적 함수 종속 제거)
- 어떤 컬럼이 PK가 아닌 다른 일반 컬럼에 종속되는 경우가 있다면,
별도 테이블로 분리하여 부모-자식 관계를 맺는다.
- 예) 우편번호와 기본 주소
<기존>
<제3정규화 과정>
"강의배정"의 "강의번호"는 "강의"의 FK가 PK가 된 것이다.
"강의배정"의 "강사번호"는 "강의"의 FK가 PK가 된 것이다.
즉, FK 가 PK로 지정되면 식별키로 지정된다.
* 비식별관계와 식별관계란 ?
* FK(외래키) = PK(주요키)인 관계를 식별 관계라고한다.
* 유니크(Unique) 컬럼 지정
- PK는 아니지만 PK처럼 중복되어서는 안되는 컬럼이다.
- 대체 키(alternate key) 컬럼이 유니크 컬럼이 된다.
- 즉 PK로 선정되지 않은 나머지 후보 키는 유니크 컬럼으로 지정하여 데이터가 중복되지 않도록 한다.
<기존>
<유니크 컬럼 지정>
* ull 허용 여부 지정
- 필수 입력 컬럼인지 선택 입력 컬럼인지 지정한다.
<기존>
<ull 허용>
* 인덱스 컬럼
- 데이터를 찾을 때 검색 조건으로 사용할 컬럼을 지정한다.
- 조회 컬럼으로 지정하면 그 컬럼의 값으로 색인표가 자동으로 생성되어
데이터를 찾는 속도가 빨라진다.
- 장점: select 속도가 빨라진다.
단점: insert,update,delete 할 때 마다 색인표를 갱신해야하므로 속도가 느리다.
<기존>
<인덱스 컬럼>
* 포함관계와 배타적 관계 식별
- 테이블의 공통 컬럼을 추출하여 수퍼 타입 테이블을 정의한다.
- 부모(수퍼타입 테이블)-자식(서비타입 테이블) 관계를 맺는다.
- DBMS의 문법으로는 포함 관계와 배타적 관계를 구분할 수 없다
<기존>
<포함관계와 배타적 관계>