Computer Science/Database
데이터 모델링의 이해
- -
본 게시물은 ‘정미나, ⌜2022 유선배 SQL개발자(SQLD)⌟, 시대고시기획, 2022’ 을 인용하였습니다.
1. 데이터 모델의 이해
1-1. 모델링이란?
- 데이터베이스의 모델링 : 현실 세계를 단순화하여 표현하는 기법
- 모델 : 현실 세계에서 일어날 수 있는 다양한 현상에 대해 일정 표기법에 의해 표현해 놓은 모형
- 모델링 : 모델을 만들어가는 일
- 모델링은 현실 세계에서 필요한 데이터를 저장하는 데이터베이스를 구축하기 위한 분석/설계의 과정
1-2. 모델링 특징
- 추상화(Abstraction) : 현실 세계를 일정한 형식으로 표현하는 것. 즉, 아이디어/개념을 간략하게 표현하는 과정
- 단순화(Simplification) : 복잡한 현실 세계를 정해진 표기법으로 단순/쉽게 표현
- 명확화(Clarity) : 불분명함을 제거하고 명확하게 해석할 수 있도록 기술
- 데이터베이스의 모델링 : '현실 세계'를 '추상화, 단순화, 명확화' 하기 위해 일정한 표기법에 의해 표현하는 기법
- 데이터 모델링 시 지양해야 할 점
- 중복(Duplication) : 같은 데이터가 여러 엔터티에 중복 저장 현상 지양
- 비유연성(Inflexibility) : 애플리케이션과 데이터 간 연계성이 높으면 애플리케이션 변경 시마다 데이터 모델도 변경되어야 함. 데이터 모델과 프로세스를 분리해 유연성을 높이는 것이 바람직함
- 비일관성(Inconsistency) : 데이터 중복 없는 경우에도 발생O. 개발자가 다른 데이터와 연관성 고려 않고 일부 데이터만 변경할 수 있기 때문
1-3. 모델링의 3가지 관점
- 데이터 관점(What, Data) : 어떤 데이터들이 업무와 얽혀있는지, 그 데이터 간의 어떤 관계가 있는지 대해 모델링
- 프로세스 관점(How, Process) : 이 업무가 실제로 처리하고 있는 일이 무엇인지 또는 앞으로 처리해야 하는 일은 무엇인지 모델링
- 데이터와 프로세스의 상관 관점(Data VS. Process, Interaction) : 프로세스의 흐름에 따라 데이터가 어떤 영향을 받는지 모델링
1-4. 모델링의 3단계
- 개념적 데이터 모델링(Conceptual Data Modeling) : 전사적 데이터 모델링 수행 시 행해지고 추상화 레벨이 가장 높은 모델링. 업무 중심적/포괄적인 수준의 모델링 진행
- 논리적 데이터 모델링(Logical Data Modeling) : 재사용성이 가장 높은 모델링으로 데이터베이스 모델에 대한 Key, 속성, 관계 등을 모두 표현하는 단계
- 물리적 데이터 모델링(Physical Data Modeling) : 실제 DB를 구현할 수 있도록 성능/가용성 등 물리적인 성격을 고려해 모델을 표현하는 단계
1-5. 데이터의 독립성

- 3단계 스키마 구조(By. ANSI-SPARC)
- 외부 스키마(External Schema)
- 사용자 관점 : Multiple User's View 단계로 각 사용자가 보는 데이터베이스의 스키마 정의
- 개념 스키마(Conceptual Schema)
- 통합된 관점 : Community View of DB 단계로 모든 사용자 관점을 통합한 조직 전체 관점의 통합적인 표현. DB에 저장되는 데이터들을 표현, 데이터들의 관계 나타냄
- 내부 스키마(Internal Schema)
- 물리적 관점 : Physical Representation 단계로 물리적 저장 구조를 나타냄. 실질적인 데이터 저장 구조, 컬럼 정의, 인덱스 등 포함
- 외부 스키마(External Schema)
- 3단계 스키마 구조가 보장하는 독립성
- 논리적 독립성 : 개념 스키마가 변경되어도 외부 스키마에 영향X
- 물리적 독립성 : 내부 스키마가 변경되어도 외부/개념 스키마에 영향X
1-6. ERD(Entity Relationship Diagram)
시스템에 어떤 엔터티들이 존재하고 그들 간의 어떤 관계가 있는지 나타내는 다이어그램
1. ERD 표기 방식
① Peter Chen : 실무 사용 드묾

② IDEFIX(Intergration Definition for Information Modeling) : 실무에서 사용하는 경우도 있고 ERWin에서 사용되는 모델

③ IE/Crow's Foot : 까마귀발 표기법이라고도 하며 가장 많이 사용됨. ERWin, ERStudio에서 사용되는 모델

④ Min-Max/ISO : 각 엔터티의 참여도를 좀 더 상세하게 나타내는 표기법

⑤ UML : 소프트웨어공학에서 주로 사용되는 모델

⑥ Case Method/Barker : Oracle에서 사용되는 모델로 Crow's Foot과 비슷

2. IE/Crow's Foot 표기법

3. ERD 작성 순서
- 엔터티 도출, 그림
- 엔터티 적절하게 배치
- 엔터티 간의 관계 설정
- 관계명 기입
- 관계 참여도 기입
- 관계의 필수/선택 여부 기입
2. 엔터티(Entity)
2-1. 엔터티란?
- 식별 가능한 객체
- 업무에서 쓰이는 데이터를 용도별로 분류한 그룹
- tip.
- 엔터티 : Table
- 인스턴스 : Row
- 속성 : Column
- 각 엔터티는 자신을 더 상세히 나타내기 위해 속성(Attribite) 가짐

2-2. 엔터티 특징
- 업무에서 자주 쓰이는 정보여야 함
- 유니크함을 보장할 수 있는 식별자가 있어야 함
- 2개 이상의 인스턴스를 갖고 있어야 함
- 반드시 속성을 가져야 함
- 다른 엔터티와 1개 이상의 관계를 가져야 함
2-3. 엔터티 분류
1. 유형 VS. 무형
- 유형 엔터티 : 물리적 형태O. 안정정/지속적(ex. 상품, 회원)
- 개념 엔터티 : 물리적 형태X. 개념적(ex. 부서, 학과)
- 사건 엔터티 : 행위를 함으로써 발생. 빈번함/통계자료로 이용O(ex. 주문, 이벤트 응모)
2. 발생 시점
- 기본 엔터티 : 독립적으로 생성됨. 자식 엔터티 가질 수 있음(ex. 상품, 회원)
- 중심 엔터티 : 기본 엔터티로부터 파생, 행위 엔터티 생성(ex. 주문)
- 행위 엔터티 : 2개 이상의 엔터티로부터 파생(ex. 주문 내역, 이벤트 응모 이력)
2-4. 엔터티 이름 정할 때 주의점
- 업무에서 실제 쓰이는 용어 사용
- 한글은 약어 사용X, 영문은 대문자 표기
- 단수 명사 표현, 띄어쓰기X
- 다른 엔터티와 의미상 중복X(주문, 결제 엔터티는 중복될 수 있음)
- 해당 엔터티가 갖고 있는 데이터가 무엇인지 명확하게 표현
3. 속성(Attribute)
3-1. 속성이란?
- 엔터티의 특징을 나타내는 최소의 데이터 단위
- 더 이상 쪼개지지 않는 레벨이어야 함
- 프로세스에 필요한 항목이어여 함
- ex. 아티스트에게 이름, 생년월일, 소속사, 데뷔연도 등 수식어 -> 속성
- '연예인' 엔터티에 '데식' 인스턴스 있을 때 '국적' 속성이 있을 수 있으나,
업무상 불필요한 데이터라고 판단되면 '국적' 속성은 삭제하는 것이 바람직
- '연예인' 엔터티에 '데식' 인스턴스 있을 때 '국적' 속성이 있을 수 있으나,
- ex. 가격변경이력은 속성이 아닌, 별도의 엔터티가 되어야 함(엔터티는 더 이상 쪼개지지 않는 레벨)
3-2. 속성값
- 각 속성은 속성값을 갖고 속성값은 엔터티에 속한 하나의 인스턴스를 구체적으로 나타내주는 데이터
3-3. 엔터티, 인스턴스, 속성, 속성값의 관계
- 엔터티 ⊃ 인스턴스 ⊃ 속성

- 한 개의 엔터티는 두 개 이상의 인스턴스를 가짐
- 한 개의 인스턴스는 두 개 이상의 속성을 가짐
- 한 개의 속성은 하나의 속성값을 가짐
3-4. 분류
1. 특성에 따른 분류
- 기본속성(Basic Attribute) : 업무 프로세스 분석 통해 바로 정의 가능한 속성
- 설계속성(Designed Attribute) : 업무에 존재하지는 않으나 설계하다보니 필요하다고 판단되어 도출해낸 속성
- ex. '학생' 엔터티에 이름, 학과, 학년 속성이 존재한다면 속성값들은 다른 인스턴스의 속성값과 중복될 수 있고 유니크함 보장X
- 학번이라는 설계속성을 만들어 학생 개개인에게 고유번호를 할당해 인스턴스에 유니크함을 부여
- ex. '학생' 엔터티에 이름, 학과, 학년 속성이 존재한다면 속성값들은 다른 인스턴스의 속성값과 중복될 수 있고 유니크함 보장X
- 파생속성(Derived Attribute) : 다른 속성의 속성값을 계산하거나 특정 규칙으로 변형해 생성한 속성
- ex. 상품 주문 프로세스 : 상품 주문해 결제하는 순간 주문 내역/상품 인스턴스 생성되고
주문 상품 인스턴스에는 주문한 상품의 개수가 속성으로 존재- 한 상품의 재고 계산을 위해 모든 주문 이력의 주문 상품 개수를 가져와 합산해야 하는데, 사용자에게 품절 여부 알리는 속도 느려질 수 있음
- 주문 상품 엔터티에서 미리 상품의 구매 수량 구한 후(실제는 취소/환불 개수 고려) 재고 계산해 속성으로 갖고 있는 경우 파생속성에 해당
- 불가피하게 필요한 경우에만 정의하는 것이 바람직
- ex. 상품 주문 프로세스 : 상품 주문해 결제하는 순간 주문 내역/상품 인스턴스 생성되고
2. 구성방식에 따른 분류
- PK(Primary Key) 속성 : 엔터티의 인스턴스들을 식별할 수 있는 속성(유니크함 부여)
- ex. '상품' 엔터티의 상품코드, '학생' 엔터티의 학번, '직원' 엔터티의 사번
- FK(Foreign Key) 속성 : 다른 엔터티의 속성에서 가져온 속성
- ex. '직원' 엔터티의 부서코드, '학생' 엔터티의 학과코드, '회원' 엔터티의 회원등급코드
- 일반속성 : PK, FK 제외한 나머지 속성
- ex. '상품' 엔터티의 상품명/가격, '학생' 엔터티의 이름/생년월일
3-5. 도메인(Domain)
- 속성이 가질 수 있는 속성값의 범위
- ex. 우편번호는 다섯 자리 숫자 범위 갖고, 엔터티 정의 시 데이터 타입/크기로 나타낼 수 있음
4. 관계(Relationship)
4-1. 관계란?
- 엔터티와 엔터티간의 관계
- 어떠한 연관성이 있는지 타입을 분류해 존재 관계&행위 관계로 나뉨
4-2. 존재 관계
- 존재 자체로 연관성 있는 관계
- ex. 직원-부서, 학생-학과
4-3. 행위 관계
- 특정 행위를 함으로써 연관성이 생기는 관계
- ex. 회원-주문, 학생-출석부
4-4. 표기법
1. 관계명(Membership) : 관계 이름

- 엔터티와 엔터티가 어떤 관계를 맺고있는지 나타내주는 문장
- 모든 관계는 2개의 관계명을 갖는데, 각 엔터티 관점에서 관계명을 하나씩 가지기 때문
- 반드시 명확한 문장으로 표현하고 현재형이어야 함

2. 관계차수(Cardinality) : 관계에 참여하는 수
- 1:1, 1:M, M:N 형식으로 구분

3. 관계선택사양(Optionality) : 필수인지 선택인지 여부
- 필수적 관계 : 참여자가 반드시 존재해야 하는 관계
- 선택적 관계 : 참여자가 없을 수도 있는 관계
- 선택참여 하는 쪽을 원으로 표현

5. 식별자(Identifiers)
5-1. 식별자란?
- 모든 엔터티는 인스턴스를 갖고 인스턴스는 속성으로 자신의 특성을 나타내고자 함
- 식별자는 이런 속성 중 각 인스턴스를 구분 가능하게 만들어주는 대표 격인 속성
5-2. 주식별자
- 기본키, PK(Primary Key)에 해당하는 속성
- 하나의 속성이 주식별자가 될 수 있고 여러 개의 속성이 주식별자가 될 수도 있음
- 유일성 : 각 인스턴스에 유니크함을 부여해 식별 가능하도록 함
- 최소성 : 유일성을 보장하는 최소 개수의 속성이어야 함
- 불변성 : 속성값이 되도록 변하지 않아야 함
- 존재성 : 속성값이 NULL 일 수 없음
5-3. 식별자 분류

1. 대표성 여부
- 주식별자(Primary Identifer)
- 유일성, 최소성, 불변성, 존재성 가진 대표 식별자
- 다른 엔터티와 참조 관계로 연결
- 보조식별자(Alternate Identifier)
- 인스턴스를 식별할 수는 있으나 대표 식별자X
- 다른 엔터티와 참조 관계로 연결X
2. 스스로 생성되었는지 여부
- 내부식별자(Internal Identifier) : 엔터티 내부에서 스스로 생성된 식별자
- 외부식별자(Foreign Identifier) : 다른 엔터티에서 온 식별자, 다른 엔터티와의 연결고리 역할
3. 단일 속성의 여부
- 단일식별자(Single Identifier) : 하나의 속성으로 구성된 식별자
- 복합식별자(Composite Identifier) : 두 개 이상의 속성으로 구성된 식별자
4. 대체 여부
- 원조식별자(Original Identifier) : 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자(본질식별자)
- 대리식별자(Surrogate Identifier) : 주식별자 속성이 2개 이상인 경우 그 속성들을 하나로 묶어 사용하는 식별자(인조식별자)
5-4. 식별자 관계 VS. 비식별자 관계
1. 식별자 관계(Identification Relationship)

- 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계
- 주식별자는 반드시 존재해야 함(존재성). 부모 엔터티가 있어야 생성 가능하고 단일식별자/복합식별자 여부 따라 1:1 혹은 1:M 결정
2. 비식별자 관계(Non-Identification Relationship)

- 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 아닌 일반 속성이 되는 관계
- 일반 속성값은 NULL이 될 수 있어 부모 엔터티가 없는 자식 엔터티 생성O
- 자식 엔터티가 존재하는 상태에서 부모 엔터티가 삭제될 수 있음
3. 식별자 관계 VS. 비식별자 관계
| 식별자 관계 | 비식별자 관계 |
| 강한 관계 | 약한 관계 |
| 부모 엔터티의 식별자가 자식 엔터티의 주식별자 | 부모 엔터티의 식별자가 자식 엔터티의 일반속성 |
| 부모 엔터티 있어야 생성O | 부모 엔터티 없는 자식 엔터티 생성O |
| 실선 | 점선 |
'Computer Science > Database' 카테고리의 다른 글
| SQL 기본 (0) | 2024.02.28 |
|---|---|
| 데이터 모델과 SQL (0) | 2024.02.27 |
| 엔터티 (0) | 2024.02.26 |
| 데이터 모델링의 이해 (0) | 2024.02.26 |
| 데이터 모델링 (0) | 2024.02.22 |
Contents
소중한 공감 감사합니다