Project DB 설계

DB 설계의 목적

  • 프로젝트, 명세서 등의 정보 요구사항에 대한 정확한 이해
  • 분석자, 개발자, 사용자간의 원활한 의사소통 수단
  • 데이터 중심의 분석 방법
  • 현행 시스템만이 아닌 신규 시스템 개발의 기초 제공

설계를 대충하면 기능 한 개 추가 될 때마다 DB와 관련된 이미 개발된 프로그램도 함께 뜯어고쳐야 하는 경우가 있다. 설계를 꼼꼼히 하자!

 

 

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

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

 

2. 개념적 설계

  • 개체(Entity) 속성(Attribure) 추출 - 명사
  • 개체 간의 관계 추출 - 동사
  • 개체와 속성 추출
    • 객체는 대부분 명사로 이루어져 있으나 속성과 구별하여 추출한다
  • 개체 간의 관계 추출
    • 개체 간의 관계는 여러가지로 분류해서 정의된다

 

3. 논리적 설계

    • 모든 개체는 릴레이션 으로 변환
      • ERD 각 개체를 릴레이션으로 변환
    • N:M 관계는 릴레이션으로 변환
      • 관계 ⇒ 릴레이션 이름
      • 관계 속성 ⇒ 릴레이션 속성
    • 1: N 관계는 외래기로 표현
      • 1측 개체의 기본키를 N 측 릴레이션에 포함
      • 1측 개체의 기본키는 외래키로 지정
    • 1:1 관계는 외래키로 표현
    • 다중값 속성은 독립된 릴레이션으로 표현

 

 

4. 물리적 스키마 및 구현

  • Workbench 같은 DB 툴이나 SQL 스크립트 사용으로 ERD를 실제 테이블로 생성한다.

 


반정규화

1. DB 정규화

  • 데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정
제 1정규화 속성의 원자성을 확보하고 원자값이 아닌 도메인을 분해한다
제 2정규화 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
제 3정규화 기본키를 제외한 컬럼간의 종속성을 제거한다. 즉, 이행 함수 종속성을 제거한다.
BCNF 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다.
제4정규화 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.
제 5정규화 조인에 의해서 종속성이 발생하는 경우 분해한다.

 

 

2. 반정규화

  • 정규화된 엔티티타입, 속성, 관계를 시스템의 성능향상, 개발과 운영의 단순화를 위해 모델을 통합하는 프로세스
  • 같은 데이터가 여러 테이블에 걸쳐 존재하므로 무결성이 깨질 우려가 있다.
  • 적당한 수준의 타협이 필요하다.

 

 

3. 테이블 반정규화 방법

  • 1:1 관계 / 1:N 관계의 테이블병합
  • 수퍼/ 서브 타입 테이블 병합
  • 수직 / 수평분할
  • 테이블 추가

 

 

4. 대표적 반정규화 - 컬럼 반정규화

  • 중복컬럼 추가 (자주 조회하는 컬럼이 있는 경우)
  • 파생 컬럼추가 (미리 계산한 값)
  • PK에 의한 컬럼 추가
  • 응용시스템 오작동을 위한 컬럼추가(이전데이터 임시보관)

 

 

5. 대표적 반정규화 - 관계 반정규화

  • 중복관계추가 - 관계를 중복해서 조회경로를 단축

⇒ 정규화? 반정규화?  “case by case”

⇒ 반정규화는 데이터 중복을 허용하고 조인을 줄이는 데이터베이스의 성능향상 방법

⇒ 반정규화도 DB튜닝의 한 방법이다.