IT_Study/Database

DATABASE (2) : 데이터베이스 설계 프로세스, 반정규화

__Vivacé__ 2023. 7. 19. 09:30

DB 설계의 목적

- 데이터 중심의 분석 방법

- 프로젝트, 명세서 등의 정보 요구사항에 대한 정확한 이해

- 분석자, 개발자, 사용자 간의 원활한 의사소통 수단

- 현행 시스템만이 아닌 신규 시스템 개발의 기초 제공

 

설계를 대충하면 디버깅 정도로 해결될수 없는 일도 발생한다.

 


데이터 모델링 절차


1. 설계를 위한 요구사항 분석

- 데이터베이스에 대한 사용자의 요구사항을 수집하고 분석해서, 기능명세서를 작성

 

2. 개념적 설계

- 작성한 요구사항 명세서에서 데이터베이스를 구성하는데 필요한 개체, 속성, 개체간의 관계를 추출하여 ERD를 생성

1. 개체(Entity)속성(Attribute)을 추출한다.
    - 대부분 명사로 추출
2. 개체 간의 관계(Relationship)를 추출gksek.
    - 대부분 동사로 선별 (개체 간의 관계를 나타내는 동사)
    - 1:1, 1:N, N:M 등
    - 필수, 선택 등

---

<요구사항 명세에서 개체, 속성 추출 샘플>

- 회원으로 가입하려면 아이디, 비밀번호, 성명, 신용카드 정보를 입력해야 한다.
- 회원의 신용카드 정보는 여러 개를 저장할 수 있다.
- 신용카드 번호, 유효기간을 저장할 수 있다.
- 회사가 보유한 비행기에 대해 비행기 번호, 출발 날짜, 출발 시간 정보를 저장하고 있다.
- 비행기 좌석에 대한 좌석 번호, 등급 정보를 저장하고 있다.
- 회원좌석을 예약하는 데, 회원 한 명은 좌석을 하나만 예약할 수 있고, 좌석은 회원 한 명만 예약할 수 있다.

 

3. 개념 설계 기반으로 ERD 생성

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테이블의 정보를 읽을 수 있는 관계가 있지만, 관계를 중복하여 조회 경로를 단축)