[Day +50 / DB Modeling]1. DB 모델링 개요, 2. 개념적 모델링
210901 수
DB모델링
*고도로 잘하는 것을 목표로 한다기 보다 어떤 것들을 지양하자를 목표로 하자!
1. DB 모델링 개요
1) 모델링
: 말 그대로 모델을 만드는 작업을 뜻함. 즉, 현실 세계를 단순화 시켜 표현하는 기법
2) 소프트웨어 개발과정 프로세스
요구사항 분석 -> 프로그램 설계 -> 프로그램 구현 -> 통합/테스트 -> 유지보수
*모델링 단계
: 아래의 소프트웨어 개발 프로세스에서 요구사항,분석, 설계 단계를 모델링 단계라고 함

3) 핵심 용어
(1) 엔티티(Entity)
: 업무의 관심 대상이 되는 정보를 갖고 있거나 그에 대한 정보를 관리할 필요가 있는 유형, 무형의 사물(개체) (유형, 무형, 문서, 이력, 코드 / 테이블과 비슷)
1> 업무의 관심 대상이 되는 사물이어야 된다.
2> 두 개 이상의 인스턴스를 소유해야된다.
3> 마땅한 속성을 소유해야 된다.

(2) 속성(Attribute)
: 엔티티에서 관리해야 할 최소 단위 정보 항목(관심이 있는 항목)을 말하며 엔티티는 하나 이상의 속성을 포함 (기본, 유도, 설계 / 컬럼과 비슷)
1> 속성의 의미가 분명히 드러나게 작성할 것 (명확)
2> 해당 업무에서 사용하는 이름 부여할 것
3> 서술식(수식어, 소유격) X, 약어 X
4> 엔티티에서 유일하게 식별 가능하도록 지정할 것 (중복 X)

(3) 인스턴스(Instance)
: 엔티티의 속성으로 실제로 구현된 하나의 값(행과 비슷)

(4) 관계
두 엔티티 사이의 관련을 나타냄

(5) 카디널리티(Cardinality)
- 각 엔티티에 속해 있는 인스턴스들 간에 수적으로 어떤 관계에 있는지를 나타냄
- 종류로는 1:1, 1:N, M:N의 관계가 있다.
*M:N관계는 물리적으로 불가능한 관계라서 반드시 해소시켜줘야 한다.(지양하자!)

(6) 주식별자(Primary Identifier)
: 엔티티 내에 있는 각각의 인스턴스를 구별하는 기준

-엔티티에 소속된 인스턴스들을 구별하는 기준 역할을 하는 속성.
-주식별자는 유일성, 최소성, 불변성, 존재성의 특징을 갖는다.
-주식별자는 하나가 아닌 여러 속성일 수 있다. (복합키)
-엔티티의 속성 중 주식별자 속성이 없다면 새로운 속성을 만들어준다. (인위적 주식별자)
(7) 외래식별자(Foreign Identifier)
: 엔티티와 엔티티를 연결해주는 고리의 역할

- 관계가 있는 두 엔티티를 부모, 자식 엔티티로 구분한 후 부모의 주식별자와 공통 속성이 자식에게도 존재하면 해당 속성을 외래식별자로 지정.
- 자식 엔티티에 부모 엔티티 주식별자 공통 속성이 없을 경우 자식에게 속성을 추가한 후 외래식별자로 지정.
4) 설계 종류
(1) 개념적 설계
요구분석 단계에서 정의된 핵심 개체와 그들 간의 관계를 바탕으로 ERD를 생성하는 단계
(2) 논리적 설계
개념 설계에서 추상화된 데이터를 구체화하여 개체, 속성을 테이블화하고 상세화 하는 과정
(3) 물리적 설계
논리적 설계 단계에서 표현된 데이터(ERD)를 실제 컴퓨터의 저장장치에 어떻게 표현할 것인가 (관계형 데이터베이스로 전환)
2. 개념적 모델링
1) 정의
(1) 엔티티
1> 엔티티 도출
업무 분석 단계 이후, 분석 자료(업무 기술서, 인터뷰 자료, 장부와 전표 등…)들로부터 엔티티 도출
2> 엔티티 도출 과정
정해진 공식은 없으나 경험이 없으면 다음의 과정들을 거쳐서 엔티티 기술서 작성
<1> 엔티티 후보 풀과 엔티티 리스트를 그린다.
<2> 분석 대상 문서를 보고 명사를 찾아 표시한다.
<3> 명사 하나하나에 대해 속성인지 엔티티인지를 구분한다.
<4> 중복된 명사나 유사한 의미의 명사는 하나로 정리한다.
<5> 엔티티 후보 풀에 있는 명사들을 검토한다.
<6> 도출된 엔티티에 대하여 구축될 시스템에서 데이터를 관리할 필요가 있는지를 판단한다
예1) 업무기술서에서 엔티티 도출하기



예2) 전표에서 엔티티 도출하기


2) 관계
(1) 엔티티 간의 부모-자식 관계
-상호 관계가 있는 두 엔티티 중에서 어느 쪽의 정보가 먼저 생성이 되는가에 따라 결정
-부모 엔티티의 정보가 있어야지만 존재할 수 있는 것이 자식 엔티티
(2) 카디널리티
-두 개의 엔티티 간 관계에서 엔티티에 속해 있는 인스턴스들을 수적으로 표현한 것
-인스턴스가 1개와 대응된다면 ‘|‘ 로 표시하고, 다수와 대응된다면 '<-'로 표시
*사진 다시 참고하기


(3) 참여도
-참여도에는 필수(mandatory), 선택(optional) 두 가지로 존재
-어떤 기준이 되는 엔티티가 있을 때 반드시 대응되는 엔티티가 존재해야 한다면 필수, 존재 할 수도, 하지 않을 수도 있다면 선택
(4) 식별 관계
-1:N 관계에서 외래 식별자가 자식 엔티티의 주식별자의 일부가 되는 관계
-PFK로 표시된다. (외래 식별자가 주식별자의 역할도 한다.)
-실선으로 관계를 표시한다.
(5) 비식별 관계
-1:N 관계에서 외래 식별자가 자식 엔티티의 주식별자 역할을 하지 못하고 단순히 새로운 속성으로 추가되는 관계
-FK로 표시된다. (단지 외래식별자의 역할만 한다.)
-점선으로 관계를 표시한다.
(6) 관계
1> 1:1 관계
: X에 속하는 한 개체는 Y에 속하는 한 개체에만 연결되며, Y에 속하는 한 개체도 X에 속하는 한 개체에만 연결될 때

2> 1:N 관계
: X에 속하는 한 개체는 Y에 속하는 여러 개체에만 연결되며, Y에 속하는 한 개체는 X에 속하는 한 개체와 연결될 때

3> M:N 관계
-X에 속하는 한 개체는 Y에 속하는 여러 개체와 연결될 수 있으며, Y에 속하는 한 개체도 X 에 속하는 여러 개체와 연결될 수 있을 때
-M:N 관계는 덜 완성된 모습으로 데이터 구조에 있어서 어떠한 실제적 방법으로도 구현이 불가능하다. (따라서 M:N관계는 해소해 주어야 한다.)
