Database Modeling
- 정보화 시스템을 구축하기 위해 어떤 데이터가 존재하는지 또는 업무에 필요한 정보는 무엇인지 분석하는 방법
- 관계형 데이터베이스는 이 ‘table’의 개념을 사용해서 데이터를 구성하는 방법을 사용
- Row = DTO
데이터베이스 모델링 순서

개념적 데이터베이스 모델링
업무분석 단계에서 얻어진 내용을 토대로 우선 Entity를 추출하고 Entity내에 속성(attribute)을 구성하며 entity간의 고나계를 정의해서 ER-Diagram을 정의하는 단계
- 사용자 부문의 처리현상을 분석한다.
- 중요 실체와ㅑ 관계를 파악하여 ERD를 작성한다.
- 실체에 대한 상세 정의를 한다.
- 식별자를 정의하고, 식별자 업무규칙을 정한다.
- 실체별로 속성을 상세화 한다.
- 필요한 속성 및 영역을 상세 정의한다.
- 속성에 대한 업무규칙을 정의한다.
- 각 단계를 마친 후 사용자와 함께 모델을 검토한다.
Entity Relationship (E-R) Diagram 기호

개체(Entity)
- 사용자와 관계가 있는 주요 객체로써 업무 수행을 위해 데이터로 관리되어져야 하는 사람, 사물, 장소, 사건 등을 개체(Entity)라고 한다.
Entity 찾는 법
- 영속적으로 존재하는 것
- 새로 식별이 가능한 데이터 요소를 가짐
- Entity는 반드시 Attribute를 가져야함
- 명사적 표현
속성(attribute)
- 저장할 필요가 있는 실체에 관한 정보
- 개체(Entity)의 성질, 분류, 수량, 상태, 특성 등을 나타내는 세부사항
- 개체에 포함되는 속성의 숫자는 10개 내외로 하는 것이 바람직함
- 최종 DB 모델링 단계를 통해 테이블의 컬럼으로 활용
-
ex) 학생 : 학번, 이름, 주민번호, 전화번호, 주소, 입학일자, 학과
직원 : 직원ID, 이름, 주민번호, 주소, 입사일자, 소속부서
속성의 유형
- 기초 속성 : 원래 갖고 있는 속성으로 현업에서 기본적으로 사용되는 속성
- 추출 속성 : 기초 속성으로부터 계산(가공)에 의해 얻어질 수 있는 속성
- 설계 속성 : 실제로 존재하지 않으나 시스템의 효율성을 도모하기 위해 설계자가 임의로 부여하는 속성
식별자
한 개체(Entity) 내에서 인스턴스를 유일하게 구분할 수 있는 단일 속성 또는 속성 그룹
- 후보키(Candidate Key)
- 개체 내에서 각각의 인스턴스를 구분할 수 있는 속성으로 기본키가 될 수 있는 후보 속성
- 기본키(Primary Key)
- 개체(Entity)에서 각 인스턴스를 유일하게 식별하는데 가장 적합한 Key.
- 기본키 설정 시 고려할 사항으로 해당 실체를 대표할 수 있을 것, 업무적으로 활용도가 높을 것 길이가 짧을 것 등이 있다.
- 대체키(Alternate Key)
- 후보키중에서 기본키로 선정되지 않은 속성
- 복합키(Composite Key)
- 하나의 속성으로 기본키가 될 수 없는 경우 둘 이상의 컬럼을 묶어서 식별자로 정의하는 경우
- 대리키(Surrogate Key)
- 식별자가 너무 길거나 여러 개의 속성으로 구성되어 있는 경우에 인위적으로 추가할 식별자
관계(Relationship)
- 두 Entity간의 업무적인 연관성 또는 관련 사실
- relationship 분석
- 각 Entity간에 특정한 존재여부 결정
- 현재의 관계 뿐만 아니라 장래에 사용될 경우도 고려
- E-R Diagram으로 관계를 설정하는 순서
-
관계가 있는 두 실체를 실선으로 연결하고 관계를 부여.

- 관계차수를 표현
- 차수성(cardinality): 한 실체의 하나의 인스턴스가 다른 실체의 몇 개의 인스턴스와 관련될 수 있는가를 정의
- 경우에 따라 발생 횟수를 조사
- 양쪽 방향 모두 조사

- 차수성(cardinality): 한 실체의 하나의 인스턴스가 다른 실체의 몇 개의 인스턴스와 관련될 수 있는가를 정의
- 선택성을 표시
- 선택성(optionality): 선택적(optional)인지 반드시(mandatory)인지를 표시
- 일반적이고 상식적인 선에서 먼저 판단
- 항상 그 관계를 만족해야만 하는지 판단
- 관계가 만족되지 않는 경우를 찾아보고 하나라도 만족되지 않는 경우가 있으면 optional로 표시
- 양쪽 방향 모두 조사

- 선택성(optionality): 선택적(optional)인지 반드시(mandatory)인지를 표시
-
차수의 종류
- 1:1
- 두 실체의 레코드가 서로 하나씩 대응

- 1:N
- 부모 실체의 하나의 레코드가 자식 실체의 여러 레코드에 대응

- N:N
- 양쪽 실체 간에 여러 개의 레코드와 관계를 맺을 수 있는 경우
차수성의 종류
-
1:1 학과와 학과장 사이


-
1:N 학과와 학생 사이


-
N:N 학생과 과목 사이


논리적 데이터베이스 모델링
개념적 데이터 모델링 단계에서 정의된 ER-Diagram을 Mapping Rule을 적용하여 관계형 데이터베이스 이론에 입각한 스키마를 설계하는 단계와 이를 이용하여 필요하다면 전규화 하는 단계로 구성
기본키(Primary Key)
- 후보키 중에서 선택한 주 키
- 널(Null)의 값을 가질 수 없다(Not Null)
- 동일한 값이 중복해서 저장될 수 없다(Unique)
참조키, 이웃키(Foreign Key)
- 관계를 맺는 두 엔티티에서 서로 참조하는 릴레이션의 attribute로 지정되는 키
Mapping Rule
-
개념적 데이터베이스 모델링에서 도출된 개체 타입과 관계 타입의 테이블 정의

-
사원 Entity: Mapping Rule을 적용하여 관계 스키마로 변환(엔티티 » 테이블)

-
1:1 관계(사원과 부서의 E-R Diagram)

-
1:N 관계(부서와 직원의 E-R Diagram)
직원 테이블 입장에서 보면 각각의 사원들이 소속 될 수 있는 부서들은 중복 될 수 있으므로 1:N이다.

-
M:N관계는 Primary Key 제약 조건에 위배

정규화
- Attribute간에 존재하는 함수적 종속성을 분석해서 관계형 스키마를 더 좋은 구조로 정제해 나가는 일련의 과정
- 데이터의 중복을 제거하고 속성들을 본래의 제자리에 위치 시키는 것

제1정규화
- 반복되는 그룹 속성을 제거한 뒤 기본 테이블의 기본키를 추가해 새로운 테이블을 생성하고 기존의 테이블과 1:N의 관계를 형성하는 과정
- 반복되는 그룹 속성이란 같은 성격과 내용의 컬럼이 연속적으로 나타나는 컬럼을 말함
정규화 적용 전 테이블
- 문제점 : 부수적인 데이터를 저장하기 위해 기본 데이터가 중복 됨

제 1정규화에 의한 테이블 분리

제2정규화
- 복합키(Composite Primary Key)에 전체적으로 의존하지 않는 속성 제거
- 제 2정규화의 대상이 되는 테이블은 키가 여러 컬럼으로 구성된 경우
- 복합키의 일부분에 의해 종속되는 것을 부분적 함수 종속관계라 하며 이를 제거하는 작업

제 2정규화에 의한 테이블 분리

제 3정규화
- 기본키에 의존하지 않고 일반 컬럼에 의존하는 컬럼들을 제거한다
- 이행적 함수 종속관계를 갖는 컬럼을 제거하는 과정

수량 PK 오타
제 3정규화에 의한 테이블 분리

최종 정규화 결과 관계 스키마

회원은 주문을 여러개 할 수 있음 → 1:N
- 점선 : 비식별 관계(PK와 PK가 아닌 것과의 관계)
- 실선 : 식별 관계(PK - PK)
물리적 데이터베이스 모델링
- 논리적 데이터베이스 모델링 단계에서 얻어진 데이터베이스 스키마를 좀더 효율적으로 구현하기 위한 작업
- DBMS 특성에 맞게 실제 데이터베이스 내의 개체들을 정의하는 단계
- Column의 domain 설정(int, varchar, date, …)
- 데이터 사용량 분석과 업무 프로세스 분석을 통해서 보다 효율적인 데이터베이스가 될 수 있도록 효과적인 인덱스를 정의하고 상황에 따른 역정규화 작업을 수행
- Index, Trigger, 역정규화
역정규화(Denomalization)
- 시스템 성능을 고려하여 기존 설계를 재구성하는 것
- 정규화에 위배되는 행위
- 테이블의 재구성
방법
- 데이터 중복(컬럼 역정규화)
- 조인 프로세스가 많아 시스템의 성능 저하를 가져오는 경우
- 조인 프로세스를 줄이기 위해 해당 컬럼을 중복함으로써 성능을 향상시키기 위한 방법
- 파생 컬럼의 생성
- 기본적으로 테이블에 없는 컬럼을 숫자 연산이나 데이터 조작 등을 통해 조회할 때 새로운 정보를 보여주는 경우
- 판매 테이블의 판매 금액 컬럼이나 성적 테이블의 총점과 평균
- 테이블 분리
- 컬럼 기준으로 분리(컬럼수)
- 레코드 기준으로 분리(레코드 양)
- 요약 테이블 생성(Summary Table)
- 조회의 프로세스를 줄이기 위해 요약된 정보만을 저장하는 테이블을 만드는 것
- 테이블 통합
- 분리된 두 테이블이 시스템 성능에 영향을 끼칠 경우 고려