Post

관계형 DB 디자인

관계형 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$ 사이의 관계에서, 각각의 인스턴스가 서로 하나에만 연결되는 경우
    1. 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
        C0011012025-01-01
        C0021022025-01-02
      • 학생증 테이블의 학번(StudentID)은 학생 테이블의 학번(StudentID)을 참조하는 Foreign Key로 설정

  1. 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)NameCardIDIssueDate
    101홍길동C0012025-01-01
    102김철수C0022025-01-02
  2. 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
      C0012025-01-01
      C0022025-01-02
    • Relationship

      StudentID(FK)CardID(FK)
      101C001
      102C002

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
      D001HR
      D002IT
    • Employee

      EmpID(PK)EmpNameDeptID(FK)StartDate
      E001홍길동D0012020-01-01
      E002김철수D0022021-03-01
      E003이영희D0012022-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
      101C0012025-03-01
      102C0022025-03-02
      101C0022025-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
      D001HR
      D002IT
    • Manages

      ProjectID(FK)EmpID(FK)DeptID(FK)StartDate
      P001E001D0012025-01-01
      P002E002D0022025-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
      101CS
    • Employee

      EmpID(PK, FK)DeptID
      102D001

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)MajorName
      101CS정재혁
    • Employee

      PersonID(PK)DeptIDName
      102D001배용남

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)NameTypeMajorDeptID
      101정재혁StudentCSNULL
      102배용남EmployeeNULLD001

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)NameIsStudentIsEmployeeMajorDeptID
      101정재혁TRUEFALSECSNULL
      102배용남FALSETRUENULLD001

Mapping of Shared Subclasses

  • 두 개 이상의 Superclass에 동시에 속하는 공통 Subclass
  • 매핑 방법이 단독 상속일때와 다르지 않음, 다만 키 관리에 유의
  • 예시: Student(StudentID, Major)Employee(EmpID, DeptID)가 superclass 이고, StudentAssistant가 subclass인 경우
    • StudentAssistant

      StudentID(PK, FK)EmpID(PK, FK)HoursWorkedName
      10120120정재혁
    • Student

      StudentID(PK)MajorName
      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)TypePersonID(FK)C_Name(FK)
      V001승용차101NULL
      V002트럭NULL삼성전자
      V003오토바이102NULL

Information System Life Cycle

정보 시스템 구축의 전반적 과정

  1. Feasibility Analysis (타당성 분석)
    비용-효과 분석, 범위 설정, 우선순위 결정

  2. Requirements Collection & Analysis (요구사항 수집/분석)
    사용자 인터뷰, 기대 기능 파악

  3. Design (설계)
    DB 시스템과 애플리케이션 시스템의 구조 설계

  4. Implementation (구현)
    실제 시스템 구축

  5. Validation & Acceptance Testing (검증/수용 테스트)
    성능 및 사양 충족 여부 테스트

  6. Deployment & Maintenance (배포/운영/유지보수)
    현장 적용 및 이후 업데이트

DB Application System Life Cycle

데이터베이스 고유의 생명 주기

  1. System Definition

  2. DB Design

  3. DB Implementation

  4. Loading / Data Conversion

  5. Application Conversion (가장 시간 많이 걸림)

  6. Testing & Validation

  7. Operation (기존 시스템과 병행 운영 가능)

  8. 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학기 강의를 정리한 내용입니다.

This post is licensed under CC BY 4.0 by the author.