MySQL로 배우는 데이터베이스 개론과 실습 (3)
22. 데이터 모델링
# 데이터 모델링이란
- 소프트웨어 개발의 지반 설계와 같은 역할
- 현실의 개념을 단순화, 추상화하여 데이터베이스화 하는 과정을 말함
# 데이터베이스 생명주기
- 데이터베이스의 생성과 운영 전반에 대한 일련의 주기를 나타낸 것. 크게 5단계로 구분됨
- 1단계. 요구사항 수집 및 분석
- 유저의 요구사항을 토대로 DB의 구축 범위를 정하는 단계.
- ex) 마당서점 : 고객, 운영자, 경영자 등의 유저 범위와 서비스 수준을 정하는 것
- 2단계. 설계
- 분석된 요구사항을 토대로 주요 개념과 업무 프로세스 등을 식별(개념적 설계)
- 사용 DBMS 종류에 맞게 변환(논리적 설계)
- DB 스키마를 도출(물리적 설계)하는 일련의 과정
- 3단계. 구현
- 설계 단계에서 생성한 스키마를 실제 DBMS에 적용
- 테이블 및 관련 객체(뷰, 인덱스) 등을 생성함
- 관련 소프트웨어에 설계한 DB를 적용해 프로그램을 완성
- 4단계. 운영
- 5단계. 감시 및 개선
23. 데이터 모델링 과정
# 데이터 모델링 과정
- 통상 데이터베이스 교재에서 말하는 데이터 모델링 과정은 DB생명주기 내 ①요구사항 수짐 및 분석 ②설계를 메인으로 함
# 개념적 모델링 (conceptural modeling, ②설계)
- 요구사항에서 핵심 개념을 추출해 전체적인 뼈대를 만드는 과정
- 건축으로 비유하면 건물 기본 골조 생성 과정임
- 개체entity 추출, 개체 간 관계 정의, ERD 작성 까지의 과정을 포함함
# 논리적 모델링 (logical modeling, ②설계)
- ERD의 개체 및 관계를 각 DBMS에 맞는 형태로(매핑이라고 함) 모델화 하는 것
- 이후 사용할 DBMS는 논리적 모델링을 실제 DB로 구현해냄
- 이때 모델의 형태는 관계 데이터 모델, 네트워크 데이터 모델, 계층 데이터 모델 등이 있음
- 실제 DB로 구현될 대상이니 개념적 모델링보다 더 해야할 과정이 많음
① 더 상세하게 속성 추출
② 정규화 수행
③ 데이터 표준화 수행 : 데이터 용어 사전 & 도메인 정의 → 사용될 용어 정리, 데이터 형태 밑 크기 확정
# 물리적 보델링 (physical modeling, ②설계)
- 논리적 모델을 실제 DB에 저장하기 위해 물리적 구조의 정의 및 구현하는 과정
- 흔히 보던 CREATE TABLE orders ( ... ) 하는 부분이 물리적 모델링에 해당함
- 응답시간 최소화, 효율적 데이터 저장(저장방법, 인덱스 설계, ...), 트랜잭션 규모 등을 고려해야 함
24. ER 모델
# ER 모델이란
- 데이터베이스 디자인을 위해 이용되는 모델링 기법 중 하나
- 사물을 (혹은 정보를) 개체, 속성, 관계로 기술하는 모델임
- ER 모델에서 규명된 개체, 속성, 관계는 통상 ER 다이어그램으로 표현됨
# 용어 정리
- ER 모델에서 꼭 등장하는 용어로 개체, 속성, 관계, 카디널리티가 있음
- 그중 카디널리티는 릴레이션(테이블)에서도 쓰는 용어인데 ER모델에서 쓰는 의미랑 살짝 다름
- 릴레이션 기준 : 튜플의 개수를 뜻함 (즉, 테이블 내 Row 새수)
- ER모델 기준 : 두 개체 간 관계에서 참여하는 인스턴스의 수를 뜻함. 즉, (1,1) (0,n) (1,n) 처럼 최소/최대 참여를 나타냄
25. 개체
# 개체
- 개체란 사람, 사물, 개념, 사건처럼 유/무형의 정보를 가지는 독립적 실체를 말함
- 개체 타입(entity type) : 개체 집합의 동일한 특징 (프로그래밍 언어의 데이터 타입이랑 비슷한 느낌임)
- 개체 집합(entity set) : 공통된 속성을 가진 개체들의 모임
# 개체 특징
- 업무의 가장 핵심 요소이자 데이터베이스화 되어야할 필수 대상
- 사실 개체 정의를 제대로 못하면 그냥 그 DB는 망한거임
- 개체 특징은 다음과 같음
- 유일한 식별자에 의해 식별가능
- 두 개 이상 영속적으로 존재
- 다른 개체와 최소 한 개 이상의 관계를 맺음
- 자기 특징을 표현하는 속성이 무조건 포함됨
- 업무에 이용되며 꾸준한 관리가 필요한 정보임
# 개체 타입표현 (ERD)
- 개체 타입은 통상 강한 개체(strong entity)와 약한 개체(weak entity) 타입으로 구분됨
- 강한 개체 : 다른 개체의 도움없이 독자 생존이 가능한 개체
- 약한 개체 : 다른 개체(상위 개체) 타입을 가지는 의존적 개체
ex) 회사DB에서 부양가족 개체는 직원이란 개체가 있어야 존재할 수 있음
26. 속성
# 속성이란
- 개체가 가진 성질을 말함
- 개별 개체가 가진 속성을 기본으로 개체 타입의 속성 정의도 가능함
- 도서 개체를 예시로 들면 '도서명', '출판사', '가격' 등이 도서 개체 타입의 속성이 될 수 있음
# 속성표현 (ERD)
- 속성은 값의 형태에 따라 여러 유형으로 구분됨
- 그리고 각 유형에 따라 ERD에서 표현하는 방법이 조금씩 다름
# 속성유형
- 단순/복합속성 (simple/composite attribute)
- 더 작은 단위로 분해 가능한지로 구분됨
- 분해 불가 : 단순, 분해 가능 : 복합 속성
- ex) 학생 번호 = 단순 속성, 주소 = 시 · 동 단위로 분해가능하므로 복합 속성
- 단일/다중값 속성(single/multi valued attribute)
- 속성값의 개수에 따라 1개면 단일, 여러개면 다중값 속성으로 구분됨
- ex) 학생 번호 = 단일 속성, 직무 = 시스템담당 겸 시설담당 겸 자산담당
- 저장/유도 속성 (stored/derived attribute)
- 속성값이 다른 속성에서 유도될 수 있는지에 따라 구분됨
- 유도 불가 : 저장속성, 유도 가능 = 유도 속성
- ex) 생년월일 : 고유값으로 저장 속성, 나이 : 생년월일에서 계산될 수 있으니 유도속성
27. 관계와 관계 타입
# 관계 관련 용어정리
- 관계 : 개체 사이의 연관성을 나타내는 개념 (고객 - 도서는 '구입한다' 라는 연관성을 가짐)
- 관계 타입 : 개체 타입 간의 연결 가능한 관계를 정의한 것
- 관계 집합 : 관계로 연결된 집합
# 관계 타입 유형
- 각 개체 타입이 관계를 맺은 형태(차수, 관계 대응 수)에 따라 몇 가지 유형으로 구분됨
- 차수에 따른 유형
- 차수란 관계 집합에 참여하는 개체 타입의 수를 말함
- 1진 관계(recursive relationship) :한 개체가 자기 자신과 관계를 맺는 경우. 학생 개체에서 학생들 사이의 멘토-멘티 관계를 맺는 경우가 이에 속함
- 2진 관계(binary relationship) : 두 개체가 관계를 맺는 경우
- 3진 관계(ternary relationship) : 세 개체가 관계를 맺는 경우. 생산직 직원이 부품을 조립해 제품을 '생산'하는 관계가 이에 속함
- 관계 대응 수에 따른 유형
- 관계 대응 수(cardinality)란 두 개체 타입의 관계에 실제로 참여하는 개별 개체 수를 말함
- 일대일, 일대다, 다대일, 다대다 관계가 있음
# 관계 대응 수 최소/최대값
- 관계 대응 수에서 1:1, 1:N, N:M은 각 개체가 관계에 참여하는 최대값을 의미함
- 문제는 최소값이 없어서 정보가 불완전하단 점임
- 이를 보완하기 위해 관계 실선 위에 (최소값, 최대값) 형식으로 표기함
- 단, (최소값, 최대값) 표기 시 각 개체의 관점을 기준으로 표기함
# ISA 관계
- 상하 관계(즉, 계층구조 혹은 상속관계)를 나타내는 관계
- 영문 "is a"를 그대로 차용한 것으로, A는 B다 라는 관계를 뜻함
- 상위 개체 타입을 슈퍼클래스, 하위 개체 타입을 서브클래스라고 함
- 역삼각형 표시에 슈퍼/서브클래스를 관계 실선으로 연결해 표현함
# 참여 제약조건
- 개체 집합 내 얼마나 많은 개체가 관계에 참여하는지를 규정해놓은 제약
- 전체 참여(두 줄 실선표기)와 부분 참여(단일 실선표기)로 구분됨
- ex) 학생은 강좌를 수강 할수도, 안할수도 있지만 모든 강좌는 학생들에게 수강됨
28. 개체 타입과 식별자
# 강한/약한 개체타입
- 강한/약한 개체타입이란 독립성과 식별 가능성을 기준으로 개체타입을 분류해놓은 것임
- 강한 개체타입 : 다른 개체 타입의 도움 없이 독립적으로 식별 가능한 개체타입
- 단독 존재가 가능하므로 개체를 고유하게 식별하는 기본 키를 가짐
- ex) '직원' 개체 타입은 강한 개체타입으로 '직원번호'란 기본키를 가짐
- 약한 개체타입 : 상위 개체 타입에 의존하며, 자체적인 고유 식별자를 가지지 못하는 개체타입
- 단독 식별이 불가능하므로 강한 개체타입의 기본키를 상속받아 사용함(외래키)
# 식별자 - 약한 개체타입
- 부분키(partial key)라고도 함
- 상위 개체 타입의 키와 결합해 약한 개체 타입의 개체를 식별하는 속성을 말함
- 아래 예시에서 AccountNumber 속성이 식별자(혹은 부분키)가 됨
Customer -------- CustomerID (Primary Key) Name Account -------- AccountNumber (Partial Key) CustomerID (Foreign Key)
29. IE 표기법
# IE 표기법(Information Engineering Notation)
- 개체와 관계를 표현함에 있어 관계의 카디널리티와 참여제약조건 표현에 중점을 둔 표기방식
- 관계 대응 수를 새 발 모양의 기호로 표현해서 새발 표기법(crow foot notation)이라고도 부름
- 관계와 관계 대응 수 테이블
기호 | 의미 |
![]() |
- 비식별자 관계 (강한 개체 타입) - 부모 개체의 키가 일반 속성으로 포함되는 관계 |
![]() |
- 식별자 관계 (약한 개체 타입) - 부모 개체의 키가 주식별자로 포함되는 관계 |
![]() |
일대다(1:N) 관계 ← N쪽에 새 발 표시 |
![]() |
0 (참여 제약조건 - 선택 참여), min 참여가 0일 경우 |
![]() |
1 (참여 제약조건 - 필수 참여), min 참여가 1일 경우 |
# ER vs IE 표기법
- (비)식별자 관계를 포함해 어떻게 서로 표현하는지 비교해보자
- 특히 비식별자 관계에서 서로 점선/실선 사용이 다른 점 주의필요
30. ER모델 → 관계 데이터 모델 매핑
# 왜 매핑이 필요한가
- ER 모델은 DB 생명주기상 개념적 모델링 단계에서 사용하는 모델임
- 실제 DB를 구축하려면 ERD의 개체 및 관계를 각 DBMS에 맞는 형태로 모델화 해줘야됨 (즉, 논리적 모델링)
- 그리고 이 논리적 모델링 단계에서 ER 모델 → 관계 데이터 모델로 매핑하는 작업이 이루어짐
논리적 모델링 예시
# 매핑 절차 (ER모델 → 관계 데이터 모델)
- 매핑 절차는 크게 보면 3단계, 세분화하면 7단계로 나뉘어짐
- STEP1 개체 타입 매핑
- 1단계 : 강한 개체 타입 매핑하기
- 2단계 : 약한 개체 타입 매핑하기
- STEP2 관계 타입 매핑
- 3단계 : 이진 1:1 관계 타입 매핑하기
- 4단계 : 이진 1:N 관계 타입 매핑하기
- 5단계 : 이진 N:M 관계 타입 매핑하기
- 6단계 : N진 관계 타입 매핑하기
- STEP3 속성 매핑
- 7단계 : 다중값 속성 매핑하기
# STEP1 개체 타입 매핑
- 강한(정규) 개체 타입
- 개체 타입에 대응하는 릴레이션 생성
- 각 속성들을 표기 후 기본키나 외래키에 PK, FK 표기
- 약한 개체 타입
- 개체 타입에 대응하는 릴레이션 생성
- 상위 개체 타입의 키를 외래키로 포함시킨 후 FK 표기
- 그 외 각 속성들을 표기
# STEP2 관계 타입 매핑
- 관계 타입 매핑시 각 관계 타입이 맺고 있는 차수와 관계 대응 수에 따라 사상 방식이 구분됨
- 가장 기본적이고 일반적인 관계 타입은 이진 관계 타입이긴 함
- 그리고 이진 관계타입을 매핑하는 방법은 총 네 가지가 있음 (그림 참고해서 보셈)
- E2 기준으로 관계 R 표현하기
- E1 기준으로 관계 R 표현하기
- 단일 릴레이션에 모두 통합해 관계 R 표현하기
- E1, E2, 관계타입 R 모두 독립 릴레이션으로 표현하기
## 이진 1:1 관계 타입 매핑 (관계 타입 매핑)
- 매핑 시 방법1~4 모두 적용 가능하긴 함
- 다만 불필요한 개체나 NULL값 (특히 외래키에) 발생이 덜한 방법이 좋음
## 이진 1:N 관계 타입 매핑 (관계 타입 매핑)
- 매핑 시 방법1~2 적용 가능
## 이진 N:M 관계 타입 매핑 (관계 타입 매핑)
- 방법4 로 매핑하며, 양쪽 다 다수의 대응 수를 가지므로 새로운 릴레이션 생성이 필수임
- 이처럼 N:M에서 만든 새로운 릴레이션을 교차 테이블이라고 함
- 즉, 교차 테이블이란 다대다 관계르 효율적으로 표현하기 위해 사용되는 중간 연결 테이블을 뜻함
## N진 관계 타입 매핑 (관계 타입 매핑)
- 방법4 로 매핑하며, 양쪽 다 다수의 대응 수를 가지므로 새로운 릴레이션 생성이 필수임
- 이처럼 N:M에서 만든 새로운 릴레이션을 교차 테이블이라고 함
# STEP3 속성 매핑 (다중값 속성 매핑)
- 단일 값의 속성은 매핑 시 딱히 문제될게 없음
- 문제는 다중값 속성인데, 얘들을 직접 매핑할 방법이 없단 거임
- 그래서 다중값 속성에 들어올 수 있는 값의 개수(즉, 도메인)에 맞춰 두 가지 방법을 사용함