Skip to content

데이터베이스 설계 #
Find similar titles

Structured data

Category
Database

데이터베이스 설계 프로세스 #

Image

데이터베이스 설계 기본원리 #

기능분석 #

데이터베이스 설계시 가장 먼저 수행하여야하는 작업으로, 기능분석을 통해 구축 대상 시스템의 규모와 기능을 정리한다.

기능분석은 구축 대상 시스템이 담고자 하는 기능을 Tree 구조로 도식화하여 정리한 것으로, 기능의 각 항목을 짧은 제목으로 표시하여 구축 대상 시스템의 기능 구성을 쉽게 정리한다.

Image

위 그림에서 볼 수 있듯이 Tree 구조의 가장 낮은 단계가 구축 대상 시스템의 최소 단위 프로세스이다.

기능분석을 통해 작성된 Tree는 구축 대상 시스템의 개발일정 산출의 근거로 사용되기도 한다.

엔티티 도출 #

엔티티(Entity)란 정보를 저장하는 최소 단위의 객체를 뜻하는 것으로, 쉽게 이해하자면 데이터베이스테이블이라 할 수 있다.

앞서 기능분석에서 도출된 단위 프로세스에서 필요한 입력데이터의 종류를 찾아내고, 처리 후 결과를 저장해야 할 종류를 분석해 나가면, 구축 대상 시스템에서 필요한 엔티티들을 도출할 수 있는 것이다.

동적분석 #

단위 프로세스데이터 흐름의 관계를 분석하고 검증할 수 있는 방법이다. 대표적인 예로는 DFD(Data Flow Diagram)가 있다.

Image

출처 : 20 YEARS OF DEVELOPING TOOLS AND METODOLOGY

DFD의 특징

1. 시스템을 분할하기 위한 중요한 모형화 도구
2. 도형을 사용하여 그림 중심으로 표현
3. 자료의 흐름에 중점을 두고 상황을 표현

DFD 작성 원칙

  1. 데이터 보존의 원칙

    • 출력 데이터의 흐름은 반드시 입력 데이터 흐름을 이용하여 생성한다.
  2. 최소 데이터 입력의 원칙

    • 출력 데이터를 산출하는데 필요한 최소의 데이터 흐름만 입력한다.
  3. 독립성의 원칙

    • 단위 프로세스는 단위 프로세스에 해당하는 입력 데이터와 출력 데이터에 대해서만 관여한다.
  4. 지속성의 원칙

    • 단위 프로세스는 항상 수행되어야 한다.
  5. 순차 처리의 원칙

    • 입력 데이터 흐름의 순서는 출력되는 데이터 흐름에서도 유지되어야 한다.
  6. 영구성의 원칙

    • 데이터 저장소의 데이터는 입력으로 사용해도 지워지지 않는다.

관계 정의 #

Image

위의 그림은 간단하게 정의된 ERD(Entity Relationship Diagram)로 엔티티간의 관계를 정의하며 주로 1:1, 1:N, N:M의 관계로 분류된다.

관계가 명확하게 정의되지 않을 경우 데이터의 무결성을 보장받을 수 없으며, ERD를 통해 구축 대상 시스템의 효율성을 검토한다.

식별자 정의 #

주식별자 정의는 전체 데이터 모델의 복잡성을 결정하는 중요한 요소이다.

아래와 같은 사항에 유의하여 정의한다.

  • 자주 이용되는 속성을 주식별자로 지정한다.
  • 속성값의 길이가 가변적인 속성을 주식별자로서 적당하지 않다.
    • "부서이름" 보다는 "부서코드"를 주식별자로 지정한다.
  • 속성값이 자주 변하는 속성은 주식별자로 적당하지 않다.
  • 주식별자를 선정하기 위한 속성(필드)의 수를 적게 한다.
  • 주식별자에는 NULL을 사용하지 않는다.

세부사항 정의 #

설계된 엔티티에 입력될 세부사항(속성)을 정의한다.

아래와 같은 사항에 유의하여 정의한다.

  • 각각의 속성은 반드시 하나의 엔티티에 속해야 한다.
  • 각각의 속성은 전체 데이터 모델에서 하나의 의미만을 가지고 있어야 한다.

정규화 #

정규화란 데이터베이스의 중복을 최소화하여 저장 효율을 높이고 연산시 이상현상을 최소화할 수 있는 논리적 구조로 변환시키는 작업으로 데이터 모델을 보다 효율적으로 개선시켜나가는 과정을 뜻한다.

반정규화 #

반정규화란 정규화를 통해서 제거된 중복데이터를 고의로 입력하는 작업을 뜻한다. 정규화가 잘되어 있는 모델의 경우 무결성이 보장되는 장점이 있지만, 정규화가 잘되어 있을 경우 성능이 저하될 수 있다. 이때, 성능 자체가 큰 이슈가 되었을 떄는 반정규화를 통해서 성능을 향상 시킨다.

검증 #

CRUD 분석 #

CRUD 분석은 프로세스와 엔티티의 상관관계를 이용하여 구축된 데이터베이스 시스템을 검증하는 방법이다.

아래의 도표처럼 모든 엔티티 목록을 나열하고 각각의 프로세스가 해당 엔티티에 대하여 생성(C), 조회(R), 변경(U), 삭제(D) 하는가에 대한 여부를 표기한다.

프로세스/엔티티 엔티티 1 엔티티 2 엔티티 3 엔티티 4
프로세스 1 C RUD
프로세스 2 R C
프로세스 3 RU C R
프로세스 4 R RUD C

CRUD 매트릭스 작성 후 아래와 같은 항목들을 점검하여 설계에 이상이 없는 가를 확인한다.

  • 모든 엔티티 타입에 CRUD가 한 번 이상 표기 되었는가?
  • 모든 엔티티 타입에 C가 한 번 이상 존재하는가?
  • 모든 엔티티 타입에 R이 한 번 이상 존재하는가?
  • 모든 단위 프로세스가 하나 이상의 엔티티 타입에 표기가 되었는가?
  • 두 개 이상의 단위 프로세스가 하나의 엔티티 타입을 생성하는가?
    • 이 경우 반드시 잘못되었다기 보다 로직의 검토 대상이 된다.

데이터베이스 설계 시 유의사항 #

  • Primary Key 설정
    • 인덱스 효율 측면을 고려하여 문자열의 UserID 필드를 Primary Key로 설정하기 보다는 일련번호 필드를 새로 추가하여 Primary Key로 사용하는 것이 효율적이다.
  • 데이터 타입 설정
    • 주민번호와 사원번호 필드의 타입을 문자형이 아닌 숫자형으로 바꾼다면 Index 효율이나 용량 면에서 많은 이점을 얻을 수 있다.
  • Index 설계
    • 한 필드에 입력될 내용의 종류가 적으면 그 필드는 Index를 만들지 않는다.
    • Data의 양(=Record 수)이 적으면 Index를 만들지 않는다.
    • 결합 Index를 생성할 때는 검색이 많은 필드를 항상 먼저 쓴다.
    • 결합 Index를 생성할 때는 효율이 좋은 필드를 먼저 쓴다.
    • Index가 가해지는 필드는 가능한 NULL 값이 없어야 한다.
  • Table Join
    • Table Join 시에는 Record의 수가 적은 것부터 Join한다.
    • 다량의 Table과 다중 Join이 필요할 시에는 Cluster를 생성한다.

데이터베이스 설계 강의자료 #

[출처] YouTube, [3장 데이터베이스 설계]

Reference #

  • 데이터베이스 설계의 기본 원리
0.0.1_20140628_0