- DB 모델링
- exerd.com의 ER-Diagram 도구 설치
- 제1정규화, 제2정규화, 제3정규화 방법
- ER-Diagram 작성법
- 논리모델링 실습
- 개인 프로젝트
- DB 모델링 수행
exerd.com 의 ER-Diagram 도구 설치
ㄴ [다운로드] 선택
=>
ㄴ eXERD 3.X -> [다운로드] 선택
=>
ㄴ eXERD 3.x Update Site URL 의 링크 선택
=>
ㄴ 해당 url 복사하기
=>
ㄴ Install New Software... 선택
=>
ㄴ [Add...] 버튼 선택
ㄴ Name 을 exerd 로 변경하고 Location 에 복사한 url 붙여넣은 후 [Add] 선택
=>
ㄴ eXERD 체크박스 체크한 후 [Next >] 선택
=>
ㄴ [Next >] 선택
=>
ㄴ I accept the terms of the license agreements 선택 후 [Finish] 선택하기
=>
ㄴ 설치 후 Eclipse 재시작
ㄴ report-server 프로젝트의 doc 폴더에 model 폴더 생성
=>
ㄴ 생성한 model 폴더에 eXERD File 선택 후 [Next >] 선택
=>
## [논리모델]
- 특정 DBMS를 고려하지 않고 수행하는 개념적인 모델링
- 표기법: IE(Information Engineering), Barker
### 01. 엔티티 식별 및 속성 식별
- 특정 값들의 집합? 시스템에서 다루는 데이터를 식별한다.
- 다른 말로 "테이블"이라고 한다.
- 테이블을 구성하는 값 => 속성(attribute) = 컬럼(column)
- 예:
- 고객(이름,전화,이메일,주소,...)
- 제품(제품명,제품가격,재고수량,...)
### 02. 주 키 선정(Primary Key; PK)
- 데이터를 구분할 때 사용할 식별자를 지정한다.
- 만약 PK로 지정할 적절한 컬럼이 없거나, 있더라도 여러 개의 컬럼을 묶어서 사용해야 하는 경우
surrogate key(대리 키=인공 키) 사용을 고려하라!
### 03. 테이블 간의 관계 식별
1. 포함 관계 및 배타적 관계 식별
- 여러 테이블에 공통으로 포함되는 컬럼이 있는 경우, 별도의 테이블로 분리한다.
- 공통 데이터를 저장하고 있는 테이블 쪽(수퍼 타입 테이블)을 부모 테이블로 하고
부모 테이블을 참조하는 테이블(서브 타입 테이블)을 자식 테이블로 하여 테이블 간에 관계를 맺는다.
- 자식 테이블 쪽에 FK가 추가된다.
- 관계 유형
- 포함 관계
- 여러 테이블에서 동시에 포함할 수 있는 관계이다.
- 배타적 관계
- 여러 테이블 중에서 오직 한 개의 테이블만 포함할 수 있는 관계다.
- 참고:
- 포함관계와 배타적관계를 제어할 수 있는 SQL 문법은 없다.
- 프로그래밍으로 제어해야 한다.
2. 일반 관계
- 두 테이블 사이의 관계 식별하여 연결한다.
- 부모-자식 관계로 정의한다.
- 데이터를 참조하는 쪽이 자식 테이블이다.
- 데이터를 참조 당하는 쪽이 부모 테이블이다.
ㄴ 테이블 추가
ㄴ 컬럼 추가 (단축키 : Command + Enter 키)
dbmodeling-01.exerd
ㄴ 프라이머리 키 컬럼 설정 (단축키 : Command + Shift + Enter 키)
=>
dbmodeling-01.exerd
ㄴ 일반 컬럼값과 프라이머리 키 컬럼 설정
#### 04. 제1정규화
- 정규화? 데이터 중복을 찾아내어 별도의 테이블로 데이터를 분리시키는 것.
- 중복 데이터 또는 중복 컬럼을 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.
- 데이터를 참조 하는 테이블이 자식테이블이고, 데이터를 갖고 있는 테이블이 부모 테이블이다.
- 자식 테이블에서는 부모 테이블의 데이터를 가리키기 위해 그 데이터의 pk값을 보관해야 한다.
- 부모-자식 테이블을 식별하기 애매할 때 1 : 다 관계에서 1 쪽이 부모 테이블이다.
- 이렇게 부모 테이블의 데이터에 대해 PK값을 저장하는 컬럼을 외부키(FK)라 부른다.
- 중복 컬럼? 사진1, 사진2, 사진3
- 중복 데이터? 지점명, ...
### 05. 제2정규화
- PK가 여러 컬럼으로 이루어진 경우에 수행
- 모든 일반 컬럼은 반드시 PK 컬럼에 종속되어야 한다.
그렇지 않은 일반 컬럼이 있다면 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.
dbmodeling-04.exerd
ㄴ 제품번호라는 이름의 프라이머리 키 컬럼을 추가
=>
dbmodeling-04.exerd
ㄴ 제품 테이블과 제품구매 테이블을 1 : 다 비식별관계로 연결
=>
dbmodeling-04.exerd
ㄴ 고객 테이블에 "고객번호" 라는 이름의 프라이머리 키 컬럼을 추가
=>
dbmodeling-04.exerd
ㄴ 고객 테이블과 제품구매 테이블을 1 : 다 비식별관계로 연결
=>
dbmodeling-04.exerd
=>
dbmodeling-04.exerd
ㄴ 테이블 테마 지정해보기
=>
dbmodeling-04.exerd
ㄴ 제품구매 테이블에 필요한 컬럼 추가
=>
dbmodeling-04.exerd
ㄴ "지점번호" 라는 이름의 프라이머리 키 컬럼 추가
=>
dbmodeling-04.exerd
ㄴ 제품사진 테이블을 분리하여 "제품사진번호" 라는 이름의 프라이머리 키 컬럼을 추가
ㄴ 제품 테이블과 제품사진 테이블을 1 : 다 비식별 관계로 연결
=>
dbmodeling-04.exerd
ㄴ 직원 테이블에 "직원번호" 라는 이름의 프라이머리 키 컬럼을 추가
ㄴ 지점 테이블과 직원 테이블을 1 : 다 비식별 관계로 연결
=>
dbmodeling-04.exerd
=>
dbmodeling-04.exerd
ㄴ 관리자 테이블을 분리하여 "관리자번호" 라는 이름의 프라이머리 키 컬럼 추가
ㄴ 지점 테이블과 관리자 테이블을 1 : 다 비식별 관계로 연결
=>
dbmodeling-04.exerd
### 06. 제3정규화
- 어떤 컬럼이 PK가 아닌 다른 일반 컬럼에 종속되는 경우가 있다면,
별도 테이블로 분리하여 부모-자식 관계를 맺는다.
- 예) 우편번호와 기본 주소
dbmodeling-06.exerd
=>
dbmodeling-06.exerd
ㄴ 자동배치 실행
=>
dbmodeling-06.exerd
ㄴ 직원 우편번호, 기본주소는 제거
=>
dbmodeling-06.exerd
### 07. 다 대 다 관계의 해소
- 테이블과 테이블 사이에 다 대 다 관계를 형성한다면,
일 대 다의 관계로 변경해야 한다.
- 왜? DBMS는 물리적으로 다 대 다 관계의 데이터를 저장할 수 없다.
- 해결책?
두 테이블의 관계를 저장할 테이블을 만든다.
"관계 테이블" 이라 부른다.
관계 테이블은 각 테이블과 일 대 다의 관계를 맺는다.
dbmodeling-07.exerd
ㄴ 현재 해소할 다대다 관계는 없음
** 다대다 관계 해소 예시
ㄴ 다대다 관계를 해소하기 위해 강의배정이라는 테이블을 추가하여 강의번호와 강사번호를 함께 엮어 PK 컬럼으로 지정해줌
### 08. 관계의 차수 지정
- 데이터 끼리 상호 관계의 개수를 지정한다.
- 예)
1 : _ (0이상) => FK 컬럼이 not null 이다.
1 : 1.._ (1이상) => FK 컬럼이 not null 이다.
0,1 : _ (0이상) => FK 컬럼이 null 허용이다.
0,1 : 1.._ (1이상) => FK 컬럼이 null 허용이다.
dbmodeling-08.exerd
ㄴ 관계 차수도 변경 내용 없음
### 09. 유니크(Unique) 컬럼 지정
- PK는 아니지만 PK처럼 중복되어서는 안되는 컬럼이다.
- 대체 키(alternate key) 컬럼이 유니크 컬럼이 된다.
- 즉 PK로 선정되지 않은 나머지 후보 키는 유니크 컬럼으로 지정하여 데이터가 중복되지 않도록 한다.
dbmodeling-09.exerd
=>
ㄴ 유니크 키 설정
=>
ㄴ 이메일을 유니크 키로 설정
=>
dbmodeling-09.exerd
=>
ㄴ 유니크 키 설정
=>
ㄴ 이메일을 유니크 키로 설정
=>
dbmodeling-09.exerd
=>
=>
=>
dbmodeling-09.exerd
=>
=>
=>
dbmodeling-09.exerd
### 10. null 허용 여부 지정
- 필수 입력 컬럼인지 선택 입력 컬럼인지 지정한다.
ㄴ 테이블 헤더 보이기
=>
dbmodeling-10.exerd
ㄴ 널 허용 체크하기
=>
dbmodeling-10.exerd
ㄴ 도메인 체크 해제
=>
dbmodeling-10.exerd
ㄴ 데이터 타입 체크 해제
=>
dbmodeling-10.exerd
ㄴ 직원 테이블 NULL 허용 설정
=>
dbmodeling-10.exerd
ㄴ 고객 테이블 NULL 허용 설정
=>
dbmodeling-10.exerd
ㄴ 제품구매 테이블 NULL 허용 설정
=>
dbmodeling-10.exerd
ㄴ 제품 테이블 NULL 허용 설정
=>
dbmodeling-10.exerd
ㄴ 지점 테이블 NULL 허용 설정
=>
dbmodeling-10.exerd
ㄴ 제품사진 테이블 NULL 허용 설정
=>
dbmodeling-10.exerd
ㄴ 관리자 테이블 NULL 허용 설정
### 11. 인덱스 컬럼 지정
- 데이터를 찾을 때 검색 조건으로 사용할 컬럼을 지정한다.
- 조회 컬럼으로 지정하면 그 컬럼의 값으로 색인표가 자동으로 생성되어
데이터를 찾는 속도가 빨라진다.
- 장점: select 속도가 빨라진다.
단점: insert,update,delete 할 때 마다 색인표를 갱신해야하므로 속도가 느리다.
dbmodeling-11.exerd
=>
=>
=>
dbmodeling-11.exerd
=>
=>
=>
dbmodeling-11.exerd
=>
=>
=>
dbmodeling-11.exerd
### 12. 포함관계와 배타적 관계 식별
- 테이블의 공통 컬럼을 추출하여 수퍼 타입 테이블을 정의한다.
- 부모(수퍼타입 테이블)-자식(서비타입 테이블) 관계를 맺는다.
- DBMS의 문법으로는 포함 관계와 배타적 관계를 구분할 수 없다
- 프로그래밍으로 처리해야 한다.
dbmodeling-12.exerd
ㄴ 회원 테이블 생성
=>
dbmodeling-12.exerd
=>
=>
dbmodeling-12.exerd
ㄴ 해당 컬럼 삭제 후 회원과 관계연결
=>
dbmodeling-12.exerd
=>
=>
dbmodeling-12.exerd
=>
=>
dbmodeling-12.exerd
=>
dbmodeling-12.exerd
=>
dbmodeling-12.exerd
=>
=>
=>
dbmodeling-12.exerd
=>
=>
=>
ㄴ 식별관계 연결 추가
=>
dbmodeling-12.exerd
=>
=>
dbmodeling-12.exerd
=>
=>
dbmodeling-12.exerd
=>
dbmodeling-12.exerd
=>
=>
dbmodeling-12.exerd
=>
dbmodeling-12.exerd
=>
dbmodeling-12.exerd
ㄴ 자동 배치 실행
=>
dbmodeling-12.exerd
dbmodeling-12.exerd
ㄴ 공지사항, 공지유형 테이블 추가
=>
dbmodeling-12.exerd
ㄴ 장바구니 테이블 추가
=>
dbmodeling-12.exerd
ㄴ 주소는 각각 필요한 곳으로 넣어준 후 주소 테이블은 제거하도록 함
=>
dbmodeling.exerd
ㄴ 최종본