목차
데이터 모델의 이해
- 정보 시스템을 구축하기 위한 데이터 관점의 업무 분석 기법
- 현실 세계의 데이터(what)를 약속된 표기법으로 표현하는 과정
- 데이터 베이스 구축을 위한 분석 및 설계의 과정
모델링의 특징
- 추상화: 현실 세계를 일정한 형식에 맞추어 표현
- 단순화: 복잡한 현실 세계를 약속된 규약에 의해 제한된 표기법 or 언어로 표현 → 쉽게 이해할 수 있도록 함
- 명확성: 애매모호함 제거, 정확하게 현상 기술 → 누구나 쉽게 이해할 수 있도록 함
모델링의 3가지 관점
데이터 관점 + 프로세스 관점 + 데이터와 프로세스의 상관 관점
- 데이터(data, what): 업무가 어떤 데이터와 관련이 있는지 / 데이터 간 관계는 무엇인지
- 프로세스(process, how): 실제하고 있는 업무는 무엇인지 / 무엇을 해야 하는지
- 상관(data vs process): 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지
중요성
- 파급효과(Leverage): 데이터 구조 변경으로 인한 일련의 변경 작업들은 전체 시스템 구축 프로젝트에서 큰 위험 요소임
- 복잡한 정보 요구 사항의 간결한 표현(Conciseness)
- 데이터 품질(Data Quality): 데이터 품질은 데이터 구조에 의해 결정됨
유의할 점
- 중복 피하기: 여러 장소에 같은 정보 저장 X
- 비유연성 피하기: 데이터의 정의를 데이터의 사용 프로세스와 분리해야 함
- 비일관성 피하기: 데이터와 데이터 간 상호 연관 관계에 대한 명확한 정의 필요
데이터 모델링의 3단계 진행
- 개념적 모델링(추상화)
사용자 요구사항 찾고 분석 → 핵심 엔터티와 그들 간의 관계 발견 → ER 다이어그램 이용해 관계 표현
▶ 데이터 모델링 과정이 전조직에 걸쳐 이루어진다면 → 전사적 데이터 모델(Enterprise data model) **
▶ EA 수립 시 이용 多 **
▶ 추상화 수준이 높고 업무 중심적이고 포괄적인 수준의 모델링 ** - 논리적 모델링(정규화)
시스템으로 구축하고자 하는 업무에 대해 key, 속성, 관계 등을 정확하게 표현
▶ 재사용성 높음 **
▶ 데이터 모델링이 최종적으로 완료된 상태 **
▶ 데이터 베이스 설계 프로세스의 Input **
▶ 논리적 모델링 과정에서 정규화 진행: 일관성 확보, 중복 제거 → 속성들이 가장 적절한 엔터티에 배치되도록 함 ** - 물리적 모델링(DB)
실제 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격 고려하여 설계
보통은 데이터 축과 애플리케이션 축으로 구분하여 프로젝트를 진행하지만 객체 지향의 경우 데이터 모델링과 프로세스 모델링을 구분하지 않고 일체형으로 진행함.
데이터 독립성
▶ 목적: 유지 보수 비용 절감, 데이터 복잡도 낮춤, 중복된 데이터 줄임 등등...
- 논리적 독립성: 개념 스키마가 변경되어도 외부 스키마에는 영향을 미치지 않도록 지원하는 것
- 물리적 독립성: 내부 스키마가 변경되어도 외부 및 개념 스키마는 영향을 받지 않도록 지원하는 것
▶ 데이터 독립성 확보 시 다음과 같은 효과를 얻을 수 있음
- 각 뷰(view)의 독립성을 유지하고 계층별 뷰에 영향을 주지 않고 변경 가능
- 단계별 스키마에 따라 데이터 정의어(DDL)와 데이터 조작어(DML)가 다름을 제공
데이터 베이스 3단계 구조(three-schema architecture)
- 외부 스키마(External Schema)
사용자 관점, 접근하는 특성에 따른 스키마 구성, 개개 사용자가 보는 개인적 DB 스키마 - 개념 스키마(Conceptual Schema)
통합 관점, 모든 사용자 관점을 통합한 조직 전체의 DB를 기술하는 것 - 내부 스키마(Internal Schema)
물리적 저장 구조, 내부 단계 + 내부 스키마, 데이터가 물리적으로 저장된 방법에 대한 스키마 구조
외부 스키마(뷰) ↔ 개념 스키마(통합된 사용자) ↔ 내부 스키마(물리)
사상(Mapping)
- 외부적, 개념적 사상(논리적 사상): 외부적 뷰 ↔ 개념적 뷰
- 개념적, 내부적 사상(물리적 사상): 개념적 뷰 ↔ DB
** DB 구조 변경 시 개념적, 내부적 사상이 변경되어야 함 → 개념적 스키마 유지 위해
데이터 모델링의 3요소
- 엔터티(thing): 업무가 관여하는 어떤 것
- 관계(relationships): 업무가 관여하는 어떤 것 간의 관계
- 속성(attributes): 어떤 것이 가지는 성격
ERD 작성 순서
- 엔터티를 그린다
▶ 엔터티는 사각형으로 표기 - 엔터티를 적절하게 배치한다
▶ 중요한 엔터티: 왼쪽 상단 - 엔터티 간 관계를 설정한다
▶ 초기에는 모두 primary key로 속성이 상속되는 식별자 관계를 설정함
▶ 중복되는 관계 X, circle 관계 X - 관계명을 기술한다
▶ 현재형 사용
▶ 지나치게 포괄적인 용어 X (이다, 가진다 등) - 관계 차수를 설정(cardinality 표시- 1:1, 1:M, M:M)한다
▶ 하나의 관계: IE 표기법 = 실선 / 바커 표기법 = 실선과 점선 혼용
▶ 다수 참여의 관계: 까마귀발
▶ 필수, 선택 표시: 관계선에 원을 표현 - 관계의 필수여부를 기술한다(필수적, 선택적 관계 표시)
엔터티
업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 것(Thing)
엔터티와 인스턴스에 대한 내용과 표기법
대부분 사각형으로 표현
특징
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 함
- 유일한 식별자에 의해 식별이 가능해야 함
- 영속적으로 존재하는 인스턴스의 집합이어야 함 (1개가 아니라 2개 이상)
- 업무 프로세스에 의해 이용되어야 함
- 다른 엔터티와 최소 한 개 이상의 관계가 있어야 함
▶ 예외적으로 관계를 생략해 표현해야 하는 경우가 존재: 통계성 엔터티 도출, 코드성 엔터티 도출, 시스템 처리 시 내부 필요에 의한 엔터티 도출 등
▶ 통계성 엔터티: 주어진 데이터를 집계(통계)하여 새로운 엔터티를 만들 때 기존의 관계를 직접적으로 유지할 필요가 없는 경우가 있음
ex) SALES(판매) 테이블이 있고, 매일매일의 판매 데이터를 저장한다고 가정. 하지만 **월별 매출 통계를 저장하는 테이블(MONTHLY_SALES)**을 따로 만든다면?
▶ 코드성 엔터티: 코드성 데이터(예: 성별 코드, 국가 코드, 제품 카테고리 등)는 원래의 데이터와 1:N 관계가 아니더라도 별도의 엔터티로 분리해서 관리하는 것이 일반적
ex) 사용자의 성별을 저장한다고 가정. 성별(M 또는 F)을 직접 USER 테이블에 넣을 수도 있지만, **코드성 엔터티 (GENDER_CODE)**로 분리하는 것이 일반적.
▶ 시스템 처리 시 내부 필요에 의한 엔터티 도출: 시스템 내부적으로 데이터를 임시 저장하거나 처리할 필요가 있을 때 관계를 생략하는 경우
ex) 사용자가 로그인하면, 시스템은 **로그인 기록(LOGIN_HISTORY)**을 남김. 하지만 USER 엔터티와 직접적인 관계 (FK)를 맺지 않을 수도 있음.
분류
1. 유무형에 따른 분류
| 유형 엔터티 (Tangible Entity) |
개념 엔터티 (Conceptual Entity) |
사건 엔터티 (Event Entity) |
| ex) 사원, 물품, 강사 | ex) 조직, 보험상품 | ex) 주문, 청구, 미납 |
2. 발생 시점에 따른 분류
| 기본 엔터티 (Fundamental Entity, Key Entity) |
중심 엔터티 (Main Entity) |
행위 엔터티 (Activity Entity) |
| 다른 엔터티와의 관계에 의해 생성되는 것이 아닌 독립적으로 생성되는 것 (부모역할) ex) 사원, 부서, 고객 등 |
기본 엔터티로부터 발생되고 그 업무에서 중심적인 역할을 함 ex) 계약, 사고, 청구, 주문 등 |
두 개 이상의 부모 엔터티로부터 발생하고, 자주 내용이 바뀌거나 데이터 양이 증가 ex) 주문 목록, 사원 변경 이력 등 |
엔터티의 명명
- 가능하면 현업에서 사용하는 용어 사용
- 가능하면 약어 사용 X
- 단수 명사 사용
- 모든 엔터티에서 유일하게 이름이 부여되어야 함
- 엔터티 생성 의미대로 의미 부여
속성
업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위
- 업무에서 필요로 함
- 의미상 더 이상 분리되지 않음
- 엔터티를 설명하고 인스턴스의 구성요소가 됨
엔터티, 인스턴스, 속성, 속성값의 관계
- 한 개의 엔터티는 두 개 이상의 인스턴스 집합이어야 함
- 한 개의 엔터티는 두 개 이상의 속성을 가짐
- 한 개의 속성은 한 개의 속성값 가짐
속성의 표기법
엔터티 내에 이름을 포함하여 표현
특징
- 해당 업무에서 필요하고 관리하고자 하는 정보여야 함
- 정규화 이론에 근거하여 정해진 주식별자에 함수적 종속성을 가져야 함
- 하나의 속성은 한 개의 값만을 가짐 → 하나의 속성에 여러 개의 값이 있는 다중값일 경우 별도의 엔터티를 이용하여 분리
분류
1. 속성의 특성에 따른 분류
| 기본속성 (Basic Attribute) |
설계 속성 (Designed Attribute) |
파생 속성 (Derived Attribute) |
| 코드성 데이터, 엔터티를 식별하기 위해 부여한 일련 번호, 다른 속성을 계산하거나 영향을 받아 생성된 속성을 제외한 모든 속성 | 업무상 필요한 데이터 이외에 데이터 모델링을 위해, 업무를 규칙화하기 위해 속성을 새로 만들거나 변형하여 정의하는 속성 ex) 코드성 속성, 일련변호, ... |
다른 속성에 영향을 받아 발생하는 속성 ex) 계산된 값들 |
2. 엔터티 구성 방식에 따른 분류
| PK(Primary Key) 속성 | FK(Foreign Key) 속성 | 일반 속성 |
| 엔터티를 식별할 수 있는 속성 | 다른 엔터티와의 관계에서 포함된 속성 | PK/FK에 포함되지 않은 특성 |
3. 세부 의미를 쪼갤 수 있는지에 따른 분류
| 단일값 속성 (Single-Valued Attribute) |
다중값 속성 (Multi-Valued Attribute) |
| 속성 하나에 한 개의 값을 가지는 경우 ex) 주민등록번호 |
속성 하나에 여러 개의 값을 가지는 경우 ex) 전화번호(집 전화번호, 개인 휴대전화번호, ...) → 1차 정규화를 하거나 개별 엔터티를 만들어 관계로 연결해야 함 |
도메인
각 속성이 가질 수 있는 값의 범위
속성의 명명
- 해당 업무에서 사용하는 이름 부여
- 서술식 속성명 사용 X
- 약어 사용 가급적 제한
- 전체 데이터 모델에서 유일성을 확보하는 것이 좋음
관계
인스턴스 사이의 논리적인 연관성으로서 존재 또는 행위로써 서로에게 연관성이 부여된 상태
관계의 페어링? 같은 엔터티 내의 인스턴스들 간 관계 설정을 의미
관계의 표현
이항관계(Binary Relationship) / 삼항 관계(Ternary Relationship) /... / n항 관계
관계의 분류
1. 목적에 따른 분류 - UML (Unified Modeling Language)
| 연관 관계 (Association) 존재에 의한 관계 |
의존 관계 (Dependency) 행위에 의한 관계 |
| ex) 부서(DB팀) - 사원(황경빈) : 소속된다 실선으로 표현됨 |
ex) 고객(김경재) - 주문(CTA201): 주문한다 점선으로 표현됨 |
** ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표현하는 반면 클래스 다이어그램에서는 이것을 구분하여 연관 관계와 의존 관계로 표현 **
관계의 표기법
주요 개념 3가지
- 관계명(Membership)
- 관계차수(Cardinality): 1:1, 1:M, M:N
- 관계 선택 사양(Optionality): 필수 관계, 선택 관계
관계명(Membership)
- 관계 시작점(The Beginning)
- 관계 끝점(The end)
관계 시작점과 끝점 모두 관계 이름을 가져야 하며, 참여자의 관점에 따라 관계 이름이 능동적(Active)이거나 수동적(Passive)으로 명명됨
명명 규칙
- 애매한 동사를 피함
- 현재형으로 표현
관계 차수(Degree / Cardinality)
이 부분은 책을 참고하는 편이 좋습니다!!
관계 선택사양(Optionality)
- 필수 참여 관계(Mandatory membership)
- 선택적인 관계(Optional membership)
선택 참여하는 엔터티 쪽을 원으로 표시 (교재 참고)
만약 관계가 표시된 양쪽 엔터티에 모두 선택 참여가 표시된다면, 즉 0:0(zero to zero)의 관계가 된다면 해당 관계는 잘못될 확률이 많으므로 관계 설정이 잘못되었는지를 검토해 보아야 함
관계 체크사항
- 두 개의 엔터티 사이에 관심 있는 연관 규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생하는가?
- 업무 기술서, 장표에 관계 연결에 대한 규칙이 서술되어 있는가?
- 업무 기술서, 장표에 관계 연결을 가능하게 하는 동사(Verb)가 있는가?
관계 읽기
- 기준(Source) 엔터티를 한 개(One) 또는 각(Each)으로 읽음
- 대상(Target) 엔터티의 관계 참여도, 즉 개수(하나, 하나 이상)를 읽음
- 관계 선택 사양과 관계명을 읽음
ex)
| 각각의/하나의 | 기준 엔터티 (Souce) |
관계 차수 | 관련 엔터티 (Target) |
선택 사양 | 관계명 |
| 각각의 | 사원은 | 한 | 부서에 | 항상 | 속한다 |
식별자
식별자란?
하나의 엔터티 내에서 인스턴스들을 구분할 수 있는 구분자
주식별자 특징
- 유일성: 주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되어야 함
- 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
- 불변성: 지정된 주식별자의 값은 자주 변하지 않는 것이어야 함
- 존재성: 주식별자가 지정이 되면 반드시 값이 들어와야 함
식별자 분류
| 대표성 여부 | 주식별자 | 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조 관계를 연결할 수 있는 식별자 |
| 보조식별자 | 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조 관계 연결을 못함 | |
| 스스로 생성 여부 | 내부식별자 | 엔터티 내부에서 스스로 만들어지는 식별자 |
| 외부식별자 | 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자 | |
| 속성 수 | 단일식별자 | 하나의 속성으로 구성된 식별자 |
| 복합식별자 | 둘 이상의 속성으로 구성된 식별자 | |
| 대체 여부 | 본질식별자 | 업무에 의해 만들어지는 식별자 |
| 인조식별자 | 업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자 |
주식별자 도출 기준
- 해당 업무에서 자주 이용되는 속성
- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정 X
→ 다른 구분자가 존재하지 않을 경우 새로운 식별자 생성(일련번호, 코드 등) - 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 함
→ 속성의 개수가 많아지는 경우 새로운 인조 식별자를 생성
식별자 관계 / 비식별자 관계
| 식별자 관계 | 부모의 주식별자 → 상속 → 자식의 주식별자(1:M, 1:1) ▶ null 값이 온면 안되므로 반드시 부모 엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우 ▶ 1:1의 관계: 부모로부터 받은 속성을 자식 엔터티가 모두 사용하고 그것만으로 주식별자로 사용되는 경우 (자식의 주식별자 = 부모로부터 상속받은 속성들) ▶ 1:M의 관계: 부모로부터 받은 속성을 포함하여 다른 부모 엔터티에서 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주식별자로 구성되는 경우 (자식의 주식별자 = 부모로부터 상속받은 속성들 + 스스로 가지고 있는 그 외 속성들) IE에서 실선으로 표현 |
| 비식별자 관계 | 부모의 주식별자 → 상속 → 자식의 일반 속성 ▶ 부모 없는 자식이 생성될 수 있는 경우, null 값이 들어와도 되는 경우 ▶ 엔터티 별로 생명주기(Life Cycle)를 다르게 관리할 경우 ex) 부모가 자식만 남겨두고 먼저 소멸할 수 있음 ▶여러 개의 엔터티가 하나의 엔터티로 통합 및 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때 ex) 교재 참고 ▶ 자식 엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단되는 경우 IE에서 점선으로 표현 |
식별자 관계로만 설정할 경우의 문제점
지속적으로 식별자 관계를 연결한 데이터 모델의 PK 속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수밖에 없는 구조를 갖게 됨
비식별자 관계로만 설정할 경우의 문제점
기준 속성이 자식 엔터티로 상속되지 않아 자식 엔터티에서 데이터를 처리할 때 쓸데없이 부모 엔터티까지 찾아가야 하는 경우가 발생
→ 불필요한 조인이 다량으로 유발되어 sql 구문이 길어지고 성능 저하 가능
요즘 SQLD 응시를 위해 열심히 공부하고 있습니다:) 꾸준히 복습용 포스팅 올려볼게요!

'자격증 공부 > SQLD 자격증' 카테고리의 다른 글
| SQLD 합격 후기 / 공부 방법 (0) | 2025.10.21 |
|---|---|
| SQLD(SQLP) 과목1 - 2장. 데이터 모델의 이해 (1) | 2025.03.07 |
| SQLD(SQLP) 과목2 - 3장. 관리 구문 (0) | 2025.03.05 |
| SQLD(SQLP) 과목2 - 2장. SQL 활용 (1) | 2025.03.03 |
| SQLD(SQLP) 과목2 - 1장. SQL 기본 (1) | 2025.02.28 |