DB 설계의 목적
- 데이터 중심의 분석 방법
- 프로젝트, 명세서 등의 정보 요구사항에 대한 정확한 이해
- 분석자, 개발자, 사용자 간의 원활한 의사소통 수단
- 현행 시스템만이 아닌 신규 시스템 개발의 기초 제공
설계를 대충하면 디버깅 정도로 해결될수 없는 일도 발생한다.
데이터 모델링 절차
1. 설계를 위한 요구사항 분석
- 데이터베이스에 대한 사용자의 요구사항을 수집하고 분석해서, 기능명세서를 작성
2. 개념적 설계
- 작성한 요구사항 명세서에서 데이터베이스를 구성하는데 필요한 개체, 속성, 개체간의 관계를 추출하여 ERD를 생성
1. 개체(Entity)와 속성(Attribute)을 추출한다.
- 대부분 명사로 추출
2. 개체 간의 관계(Relationship)를 추출gksek.
- 대부분 동사로 선별 (개체 간의 관계를 나타내는 동사)
- 1:1, 1:N, N:M 등
- 필수, 선택 등
---
<요구사항 명세에서 개체, 속성 추출 샘플>
- 회원으로 가입하려면 아이디, 비밀번호, 성명, 신용카드 정보를 입력해야 한다.
- 회원의 신용카드 정보는 여러 개를 저장할 수 있다.
- 신용카드 번호, 유효기간을 저장할 수 있다.
- 회사가 보유한 비행기에 대해 비행기 번호, 출발 날짜, 출발 시간 정보를 저장하고 있다.
- 비행기 좌석에 대한 좌석 번호, 등급 정보를 저장하고 있다.
- 회원은 좌석을 예약하는 데, 회원 한 명은 좌석을 하나만 예약할 수 있고, 한 좌석은 회원 한 명만 예약할 수 있다.
3. 개념 설계 기반으로 ERD 생성
4. 논리적 설계
1. 모든 개체는 릴레이션(Table)으로 변환
- 개체 : 테이블 / 속성 : 테이블의 속성
- 회원 개체의 경우, 헤더를 회원아이디, 성명, 비밀번호로
2. N:M 관계는 릴레이션(Table)으로 변환
- 관계 : 릴레이션 이름 / 관계속성 : 릴레이션 속성
3. 1:N 관계는 외래키로 표현
- 일반적으로 1:N 관계에서 1측 개체의 기본키를 N측 릴레이션에 포함시키고 외래키로 지정
4. 1:1 관계는 외래키로 표현
- 일반적인 1:1 관계는 외래키를 서로 주고 받는다.
5. 다중 값 속성은 독립 릴레이션(Table)로 변환
- 릴레이션에서는 다중 값 속성을 가질 수 없으므로, 다중 값 속성은 별도의 릴레이션으로 생성
- 사원 릴레이션 : 사원번호 / 이름 & 자녀 릴레이션 : 사원번호(외래키) / 자녀이름
5. 물리적 스키마 및 구현
ERD를 실제 테이블로 구성한다
반정규화
키워드는 시스템의 성능 향상
정규화 모델 | 반정규화 모델 | |
정의 | RDMBS의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스 | 정규화된 엔티티타입, 속성, 관계를 시스템의 성능향상, 개발과 운영의 단순화를 위해 모델을 통합하는 프로세스 |
장점 | - 모든 엔티티 타입, 속성, 관계가 반드시 한 개만 존재 - 입력, 수정, 삭제도 한 군데에서만 발생 - 데이터 값 변질, 이질화 가능성 없음 |
- 단순한 테이블 : SQL 작성이 용이 |
단점 | - 여러 테이블 생성 : SQL 작성 용이 x - 과다한 테이블 조인 : 성능 저하 가능성 |
- 같은 데이터가 여러 테이블에 존재 : 무결성이 깨질 가능성 |
테이블 반정규화 방법
- 1:1 관계의 테이블 병합
- 1:N 관계의 테이블 병합
- Super / Sub 타입 테이블 병합
- 수직 분할 (집중화된 일부 컬럼을 분리)
- 수평 분할 (행으로 구분하여 구간별 분리)
- 테이블 추가 (중복테이블, 통계테이블, 이력케이블, 부분테이블)
1. 컬럼 반정규화
- 중복 컬럼 추가 (자주 조회하는 컬럼이 있는 경우)
- 파생 컬럼 추가 (미리 계산한 값)
- PK에 의한 컬럼 추가
- 응용시스템 오작동을 위한 컬럼 추가 (이전데이터 임시 보관)
2. 관계 반정규화
- 중복 관계 추가 (이미 A테이블에서 C테이블의 정보를 읽을 수 있는 관계가 있지만, 관계를 중복하여 조회 경로를 단축)
'IT_Study > Database' 카테고리의 다른 글
DATABASE (1) : DataBase Expression, DataType, MySQL Syntax 요약 (0) | 2023.02.11 |
---|