개념적 모델링
- 업무의 핵심 개념을 구분 전체적인 레이아웃을 만드는 과정
- 핵심개념
- 개체 추출
- 개체들 사이의 관계 정의 - PK 표현
를 토대로 ER 다이어그램을 그린다
- book 도서개체
- customer 고객개체
- orders 주문개체
- 요구사항
- 서점은 출판사에서 도서를 공급받아 판매한다
- 판매 내역은 매일 기록으로 남겨야한다-->고객서비스와 매출 관리에 활용
- 서점은 판매하는 도서의 도서번호, 도서이름, 출판사, 도서단가를 가진다
- 구매한 도서들은 납품한 출판사와 출판사 담당자 이름, 전화번호를 가진다
- 고객이 책을 주문할 때마다 주문번호를 기록해야 한다
- 고객에게 판매한 도서는 판매한 날, 고객별 주문 금액 추가로 관리해야 한다
- 고객들은 여러번에 걸쳐 다양한 도서를 구매할 수 있다
개념설계/논리설계 (개체와 관계를 구분하여 정리한다)
- 개체 entity
- 도서(도서번호, 도서이름, 출판사, 도서단가)
- 고객(고객번호, 고객이름, 주소, 전화번호)
- 출판사(출판사 이름, 담당자 이름, 전화번호)
- 관계 relation
- 출판사 : 도서 = 1 : N (서점은 출판사로부터 공급한 도서만 등록하여 관리) -> 비식별 관계
- 고객 : 도서 = N : M -> 식별 관계 --> 주문 관계 표현(도서와 고객의 pk)
- 주문관계(교차 테이블) :
고객이 도서를 구입한 날(주문일자), 구매한 가격(주문금액) 을 따로 저장한다 = 고객과 도서의 관계에 속성이 존재
논리적 모델링
물리적 모델링
- 모델링 시 트랜잭션, 저장 공간 설계 측면에서 고려해야 할 사항
- 응답시간 최소화
- 얼마나 많은 트랜잭션을 동시에 발생시킬 수 있는지 검토
- 데이터가 저장될 공간을 효율적으로 배치
Database Tuning
- 성능 향상 = 응답 시간 단축(최소화)
- 인덱스가 속도에 가장 많은 영향을 준다
Index
- 컬럼에 인덱스를 건다
- 하나의 컬럼에 하나의 인덱스를 건다
- 데이터 조회시 무조건 pk로 하지 말고 자주 검색하는 컬럼에 인덱스를 걸어서 사용
create index 인덱스이름 on 테이블명(컬럼명);
drop index 인덱스이름;
show index from 테이블명;
Clustered Index
- 테이블 생성시 제약조건 pk를 사용하면 자동으로 인덱스가 생성된다
- 테이블 당 하나
- 행 데이터를 자신의 열(pk)을 기준으로 정렬한다
- pk와 unique not null로 지정한 열이 두개가 있다면 pk의 열이 우선 클러스터형 인덱스가 생성된다
- pk로 지정한 열로 데이터가 asc 오름차순 정렬된다
Secondary Index
- 테이블 생성시 제약조건 unique(not null)를 사용하면 자동으로 보조 인덱스가 생성된다
- 보조 인덱스는 여러 개 생성될 수 있다
- unique로 생성된 index(=보조 인덱스)는 pk와 다르게 null 값을 허용한다
- not null 조건을 추가하면 clustered index로 만들 수 있다