관계형 DB 디자인
ER to Relational DB
ER(Entity-Relationship) 모델을 Relation으로 매핑해 관리할 수 있음
Step1: Mapping of Regular Entity Types
- ER 스키마의 엔터티 타입 $E$에 대해서, $E$의 모든 속성을 포함하는 relation $R$을 작성
- 단순 속성만 포함, 복합 속성은 단순 구성요소로 분해 후 포함
- $E$의 key 특성 중 하나를 $R$의 primary key로 설정
- 만약 복합 키(composite key)라면, 여러 개의 simple attribute을 모두 키로 사용
- $E$의 각 속성은 $R$의 속성으로 매핑
- e.g. 학생, 직원, 교수
Step2: Mapping of Weak Entity Types
- weak entity type $W$에 대해, $W$의 모든 속성을 저장하는 새 relation $S$ 생성
- owner entity $E$의 primary key를 $R$의 foreign key로 포함
- $S$의 기본 키는, $E$의 primary key와 $W$의 partial key의 조합
- weak entity type $W_1$이 또 다른 weak entity type $W_2$의 owner entity라면, $W_1$의 매핑이 선행되어야함
- e.g. 부양 가족, 학부모
Step3: Mapping of Binary 1:1 Relationship types
- relation $R$에 참여하는 두 엔터티 $E_1, E_2$ 사이의 관계에서, 각각의 인스턴스가 서로 하나에만 연결되는 경우
- Foreign Key Approach
- $E_1, E_2$의 relation $S, T$에 대해, $T$의 primary key를 $S$의 기본 키로 포함
- 예시:
Student(StudentID, Name)
과StudentCard(CardID, IssueDate)
의 관계에서, Student의 primary key를 StudentCard의 foreign key로 설정Student
StudentID(PK) Name 101 홍길동 102 김철수 StudentID
CardID(PK) StudentID(FK) IssueDate C001 101 2025-01-01 C002 102 2025-01-02 학생증 테이블의
학번(StudentID)
은 학생 테이블의학번(StudentID)
을 참조하는 Foreign Key로 설정
- Merged Relation
- 두 relation $S, T$를 하나의 relation $U$로 병합
- $U$는 $S$와 $T$의 모든 속성을 포함
- $U$의 primary key는 $S$와 $T$의 primary key 중 하나를 선택
- 예시:
Student(StudentID, Name)
과StudentCard(CardID, IssueDate)
의 관계에서, 두 relation을 병합하여 하나의 relation 생성- StudentCard
StudentID(PK) Name CardID IssueDate 101 홍길동 C001 2025-01-01 102 김철수 C002 2025-01-02 - Relationship Relation
- 관계를 별도의 relation $R$로 생성
- $R$은 관계에 참여하는 두 엔터티 $E_1, E_2$의 primary key를 포함
- $R$의 primary key는 $E_1$과 $E_2$의 primary key의 조합
- 관계의 속성은 $R$의 속성으로 포함
- 예시:
Student(StudentID, Name)
과StudentCard(CardID, IssueDate)
의 관계에서, 관계를 별도의 relation으로 생성
Student
StudentID(PK) Name 101 홍길동 102 김철수 StudentCard
CardID(PK) IssueDate C001 2025-01-01 C002 2025-01-02 Relationship
StudentID(FK) CardID(FK) 101 C001 102 C002
Step4: Mapping of Binary 1:N Relationship types
- relation $R$에 참여하는 두 엔터티 $E_1, E_2$ 사이의 관계에서, $E_1$의 각 인스턴스가 $E_2$의 여러 인스턴스와 연결되는 경우
- $E_1$의 relation $S$와 $E_2$의 relation $T$에 대해, $S$의 primary key를 $T$의 foreign key로 포함
- Relationship에도 속성이 있다면, 왜래키와 함께 N쪽의 테이블에 포함
- 예시:
Department(DeptID, DeptName)
과Employee(EmpID, EmpName, DeptID)
의Works_For
관계에서, Department의 primary key를 Employee의 foreign key로 설정, 관계의 특성은 Employee의 특성으로 포함Department
DeptID(PK) DeptName D001 HR D002 IT Employee
EmpID(PK) EmpName DeptID(FK) StartDate E001 홍길동 D001 2020-01-01 E002 김철수 D002 2021-03-01 E003 이영희 D001 2022-07-15
Step5: Mapping of Binary M:N Relationship types
- relation $R$에 참여하는 두 엔터티 $E_1, E_2$ 사이의 관계에서, $E_1$의 여러 인스턴스가 $E_2$의 여러 인스턴스와 연결되는 경우
- 관계를 별도의 relation $S$로 생성
- $S$은 관계에 참여하는 두 엔터티 $E_1, E_2$의 primary key를 포함
- $S$의 primary key는 $E_1$과 $E_2$의 primary key의 조합
- 관계의 속성은 $S$의 속성으로 포함
- 예시:
Student(StudentID, Name)
과Course(CourseID, CourseName)
의Enrolls
관계에서, 관계를 별도의 relation으로 생성Student
StudentID(PK) Name 101 홍길동 102 김철수 Course
CourseID(PK) CourseName C001 데이터베이스 C002 운영체제 Enrolls
StudentID(FK) CourseID(FK) EnrollDate 101 C001 2025-03-01 102 C002 2025-03-02 101 C002 2025-03-03
Step6: Mapping of Multivalued Attributes
- 다중값 속성 $A$를 가진 엔터티 $E$에 대해, $A$를 저장하는 별도의 relation $R$ 생성
- $R$은 $E$의 primary key와 $A$를 포함
- $R$의 primary key는 $E$의 primary key와 $A$의 조합
예시:
Student(StudentID, Name)
엔터티가 다중값 속성Club
을 가진 경우,Club
을 별도의 relation으로 생성Student
StudentID(PK) Name 101 정재혁 102 배용남 Student_Club
StudentID(FK) Club(PK) 101 댄스부 101 패션부 102 패션부
Step7: Mapping of n-ary Relationship Types
- 3개 이상의 entity가 하나의 관계에 동시에 참여하는 경우
- 관계를 별도의 relation $R$로 생성
- $R$은 관계에 참여하는 모든 엔터티의 primary key를 포함
- $R$의 primary key는 참여 엔터티들의 primary key의 조합
- 관계의 속성은 $R$의 속성으로 포함
예시:
Project(ProjectID, ProjectName)
과Employee(EmpID, EmpName)
그리고Department(DeptID, DeptName)
의Manages
관계에서, 관계를 별도의 relation으로 생성Project
ProjectID(PK) ProjectName P001 신입 공채 P002 데이터 분석 Employee
EmpID(PK) EmpName E001 홍길동 E002 김철수 Department
DeptID(PK) DeptName D001 HR D002 IT Manages
ProjectID(FK) EmpID(FK) DeptID(FK) StartDate P001 E001 D001 2025-01-01 P002 E002 D002 2025-02-01
EER to Relational DB
EER은 ER에 specialization과 generalization이 추가된 개념.
이를 위한 매핑 전략이 따로 필요
Stpe8: Mapping of Specialization or Generalization
각 specialization을 $m$개의 subclass $\{S_1, \dots, S_m\}$로 변환, superclass $C$를 $\{k,a_1, \dots, a_n\}$의 relation으로 매핑
Option A: Superclass + Subclass
- superclass $C$를 relation $R$로 변환, $R$은 $C$의 primary key $k$와 모든 속성 $\{a_1, \dots, a_n\}$을 포함
- 각 subclass $S_i$를 relation $R_i$로 변환, $R_i$는 $S_i$의 primary key $k$와 $S_i$의 속성 $\{b_1, \dots, b_p\}$를 포함
- $R_i$의 primary key는 $k$
- $R_i$의 $k$는 $R$의 foreign key로 설정
예시:
Person(PersonID, Name)
이 superclass이고,Student(StudentID, Major)
와Employee(EmpID, DeptID)
가 subclass인 경우Person
PersonID(PK) Name 101 정재혁 102 배용남 Student
StudentID(PK, FK) Major 101 CS Employee
EmpID(PK, FK) DeptID 102 D001
Option B: Subclass Only
- 각 subclass $S_i$를 relation $R_i$로 변환, $R_i$는 $S_i$의 primary key $k$와 $S_i$의 속성 $\{b_1, \dots, b_p\}$를 포함
- $R_i$의 primary key는 $k$
- superclass $C$는 별도의 relation으로 생성하지 않음
- Total specialization(상위 클래스의 모든 개체가 반드시 어떤 하위 클래스에 속함)일 때만 가능
예시:
Person(PersonID, Name)
이 superclass이고,Student(StudentID, Major)
와Employee(EmpID, DeptID)
가 subclass인 경우Student
PersonID(PK) Major Name 101 CS 정재혁 Employee
PersonID(PK) DeptID Name 102 D001 배용남
Option C: Single relation with 1 Type Attribute
- superclass $C$와 모든 subclass $\{S_1, \dots, S_m\}$를 하나의 relation $R$로 병합
- $R$은 $C$의 primary key $k$, 모든 속성 $\{a_1, \dots, a_n\}$, 각 subclass의 속성 $\{b_1, \dots, b_p\}$, 그리고 type attribute $t$를 포함
- $t$는 각 튜플이 어떤 subclass에 속하는지 나타냄
예시:
Person(PersonID, Name)
이 superclass이고,Student(StudentID, Major)
와Employee(EmpID, DeptID)
가 subclass인 경우Person
PersonID(PK) Name Type Major DeptID 101 정재혁 Student CS NULL 102 배용남 Employee NULL D001
Option D: Single relation with Multiple Type Attributes
- superclass $C$와 모든 subclass $\{S_1, \dots, S_m\}$를 하나의 relation $R$로 병합
- $R$은 $C$의 primary key $k$, 모든 속성 $\{a_1, \dots, a_n\}$, 각 subclass의 속성 $\{b_1, \dots, b_p\}$, 그리고 각 subclass에 대한 type attribute $\{t_1, \dots, t_m\}$를 포함
- 각 type attribute $t_i$는 튜플이 해당 subclass에 속하는지 여부를 나타냄
예시:
Person(PersonID, Name)
이 superclass이고,Student(StudentID, Major)
와Employee(EmpID, DeptID)
가 subclass인 경우Person
PersonID(PK) Name IsStudent IsEmployee Major DeptID 101 정재혁 TRUE FALSE CS NULL 102 배용남 FALSE TRUE NULL D001
Mapping of Shared Subclasses
- 두 개 이상의 Superclass에 동시에 속하는 공통 Subclass
- 매핑 방법이 단독 상속일때와 다르지 않음, 다만 키 관리에 유의
- 예시:
Student(StudentID, Major)
와Employee(EmpID, DeptID)
가 superclass 이고,StudentAssistant
가 subclass인 경우StudentAssistant
StudentID(PK, FK) EmpID(PK, FK) HoursWorked Name 101 201 20 정재혁 Student
StudentID(PK) Major Name 101 컴퓨터공학 정재혁 102 경영학 조정구 Employee
| EmpID(PK) | DeptID | Name | | ——— | —— | —— | | 201 | D001 | 정재혁 | | 202 | D002 | 이호창 |
Step9: Mapping of Categories
- category는 여러 superclass의 공통 속성을 가진 subclass(슈퍼클래스들이 전혀 다른 종류일 수도 있음)
- category를 별도의 relation $R$로 생성
- $R$은 category에 참여하는 모든 superclass의 primary key를 포함
- $R$의 primary key는 참여 superclass의 primary key의 조합
- category의 속성은 $R$의 속성으로 포함
- 예시:
Person(PersonID, Name)
와Company(C_Name, C_Address)
가 superclass이고,Vehicle(VehicleID, Type)
이 category인 경우Person
PersonID(PK) Name 101 정재혁 102 배용남 Company
C_Name(PK) C_Address 삼성전자 서울 LG전자 경기 Vehicle
VehicleID(PK) Type PersonID(FK) C_Name(FK) V001 승용차 101 NULL V002 트럭 NULL 삼성전자 V003 오토바이 102 NULL
Information System Life Cycle
정보 시스템 구축의 전반적 과정
Feasibility Analysis (타당성 분석)
비용-효과 분석, 범위 설정, 우선순위 결정Requirements Collection & Analysis (요구사항 수집/분석)
사용자 인터뷰, 기대 기능 파악Design (설계)
DB 시스템과 애플리케이션 시스템의 구조 설계Implementation (구현)
실제 시스템 구축Validation & Acceptance Testing (검증/수용 테스트)
성능 및 사양 충족 여부 테스트Deployment & Maintenance (배포/운영/유지보수)
현장 적용 및 이후 업데이트
DB Application System Life Cycle
데이터베이스 고유의 생명 주기
System Definition
DB Design
DB Implementation
Loading / Data Conversion
Application Conversion (가장 시간 많이 걸림)
Testing & Validation
Operation (기존 시스템과 병행 운영 가능)
Monitoring & Maintenance
DB Design – 목표와 문제
문제:
사용자와 애플리케이션 요구를 반영하는 논리/물리적 구조 설계- 목표:
정보 요구 만족
이해하기 쉬운 구조
성능 만족
- Understandability vs Performance 사이의 균형 필요
DB Design & Implementation Phases
- Phase 1
Requirement Collection and Analysis (요구사항 수집 및 분석) - Phase 2
Conceptual DB Design (ER/EER 디자인) - Phase 3
DBMS 선택 - Phase 4
Logical Design (Relation 모델) - Phase 5
Physical Design (인덱스, 저장 구조 등) - Phase 6
Testing, Operation, Maintenance
해당 포스트는 서울대학교 산업공학과 박종헌 교수님의 데이터관리와 분석 25-1학기 강의를 정리한 내용입니다.