[데이터베이스] Ch6 Database Design Using the E-R Model

Junyoung Park·2022년 8월 15일

데이터베이스

목록 보기
6/6
post-thumbnail

Database Design Using the E-R Model

디자인 프로세스

  • 데이터베이스 사용자가 필요한 데이터의 특징을 모두 나열하기
  • 선택한 데이터 모델의 컨셉을 적용하기
  • ER 모델을 통해 데이터베이스의 컨셉 스키마로 옮기기
  • 추상적 데이터 모델을 통해 실제 데이터베이스 구현하기: (1). 논리적 디자인 (2). 물리적 디자인

디자인 프로세스 이슈

  • 불완전한 데이터베이스 모델링: 불가능한 데이터를 다루게 될 위험
  • 중복 데이터: 불필요한 중복 어트리뷰트 및 데이터 표현을 줄여야 함

디자인 접근 방법

  • 엔티티 릴레이션십 모델: 엔티티와 릴레이션십으로 구성된 모델. 모델은 어트리뷰트 집합으로 구성, 릴레이션십은 모델 간의 관계. 다이어그램을 통해 표현
  • 정규화 이론

엔티티-릴레이션십 모델

  • ER 모델: 데이터베이스의 전반적인 논리적 모델을 표현하는 엔터프라이즈 스키마

엔티티 셋

  • 엔티티(entity): 다른 객체와 구별 가능한 객체. 어트리뷰트의 집합으로 표현
  • 프라이머리 키: 엔티티를 이루는 특정 어트리뷰트의 부분 집합. 프라이머리 키를 통해 해당 엔티티 데이터 중 하나를 특징할 수 있음
  • 엔티티 셋(entity set): 같은 프로퍼티를 공유하는 같은 타입의 엔티티 집합

엔티티 셋 다이어그램

  • 사각형: 엔티티 셋
  • 어트리뷰트: 엔티티 사각형 안의 글씨
  • 밑줄: 어트리뷰트 중 하나로 해당 엔티티의 프라이머리 키

릴레이션십 셋

  • 릴레이션십(relationship): 여러 개의 엔티티들 가운데 관계
  • 릴레이션십 셋(relationship set): 각 엔티티 셋에서 취해진 두 개 이상의 엔티티 간의 수학적 릴레이션

릴레이션십 셋 다이어그램

  • 릴레이션이 존재하는 엔티티 간에 선을 그어서 표현
  • E.g.) 특정 강사는 특정 학생의 advisor가 될 수 있다.

    위 실제 데이터가 들어 있는 릴레이션말고 보다 추상적으로 표현할 수 있다!

  • 마름모를 통해 엔티티 간의 릴레이션십이 존재함을 알려줄 수 있다.

    릴레이션십 셋 자체에도 어트리뷰트가 있을 수 있을까? advisor에 해당하는 관련 어트리뷰트는 어디에 표현해야 할까?

  • 마름모 꼴 릴레이션십 셋에 직접 점선으로 이어서 표시하면 된다.

Role

  • 특정 엔티티가 특정 릴레이션 셋에서 수행하는 역할을 표시

릴레이션십 셋의 종류

  • 바이너리 릴레이션십
  • 세 개 이상의 엔티티 셋 간의 릴레이션십, 논-바이너리 릴레이션십

어트리뷰트

  • simple: 더 이상 나누어지지 않는 어트리뷰트. composite와 대척점에 있다.
  • composite: 특정 어트리뷰트가 다른 어트리뷰트 집합을 하위 집합으로 둘 수 있다(name 어트리뷰트는 first_name, last_name 등을 하위 집합으로 가질 수 있다).
  • Single-valued: 특정 튜플이 해당 어트리뷰트 값을 한 개만 가질 수 있다(사람의 나이는 A살이지, A살이면서 동시에 B살일 수 없다).
  • mutlvalued: 동시에 여러 개의 값을 가질 수 있는 어트리뷰트(사람의 취미는 A, B 모두 가능하다).
  • derived: 특정 어트리뷰트 값이 다른 어트리뷰트로부터 도출될 수 있을 때

카디널리티 매핑

  • 카디널리티 제약 조건: (1). 일(→) (2). 다(⎯)
  • 릴레이션 십 및 엔티티 셋 간의 관계 표현 가능

One-to-One

  • 강사 한 명은 학생 한 명만, 학생 한 명은 강사 한 명만 연결 가능

One-to-Many

  • 강사 한 명이 여러 명의 학생을, 학생 한 명은 강사 한 명까지 연결 가능

Many-to-Many

  • 강사 한 명이 여러 명의 학생을, 학생 한 명이 강사 여러 명까지 연결 가능

위 모든 경우에서 여러 명, 한 명은 0명까지 포함한다는 데 주의하자!

Total and Partial Participation

  • 릴레이션 십 매핑이 모든 데이터 단에서 된 경우를 판단한다.

Total Participation

  • 더블 라인으로 표현

    강사와 학생 간의 릴레이션에서 학생은 더블 라인으로 표현되어 있다. 학생 카디널리티가 1이고 더블 라인-total이므로 모든 학생은 무조건적으로 한 명의 강사와 매핑되어야 하는 게 표현되어 있다.

Partial Participation

  • 일부 엔티티가 매핑되어 있지 않을 수 있다. 위 ER 다이어그램에서 특정 강사는 최대 한 명의 학생과 매핑되는데, 0명, 즉 매핑되지 않을 수도 있다는 게 일반 라인 한 줄로 표현되어 있다.

Complext Constraints

  • total, partial 등을 통해 전체 매핑 여부를 판단할 수 있지만 보다 복잡한 경우의 수에 대해서는 실제로 수를 통해 표시한다.
  • 최솟값과 최댓값을 ... 키워드 끝에 표시해서 해당 릴레이션십에서 특정 엔티티가 가지는 카디널리티를 표현
  • E.g.) 강사 한 명 다 학생 0명에서 모든 학생까지 매핑 가능. 학생 한 명 당 강사 1명에서 강사 1명까지, 즉 무조건적으로 1명씩 매핑해야 한다는 게 표현되어 있다. 이를 위의 ER 다이어그램을 통해 표현한다면 강사와 학생은 다 대 일 매핑으로, 학생의 경우는 total, 강사의 경우는 partial로 표현 가능하다.

프라이머리 키

  • 엔티티와 릴레이션이 구분되는 방법을 구체적으로 보여주는 프라이머리 키

엔티티 셋 수퍼키

  • 각 엔티티는 구별되어 있는 distinct.
  • 어트리뷰트를 통해 각 엔티티 셋 간의 차이가 드러나야 함
  • 엔티티 셋의 각 엔티티는 자신이 가지고 있는 어트리뷰트 값이 유니크해야 함
  • 엔티티 수퍼키: 어트리뷰트 값을 통해 다른 엔티티와 구별 가능한 어트리뷰트 집합

릴레이션십 셋 수퍼키

  • 특정 릴레이션십 셋을 다른 릴레이션십 셋과 구별하는 수퍼키
  • 릴레이션십 셋을 구성하는 엔티티 셋의 프라이머리 키 합집합을 포함하는 해당 릴레이션십 셋의 수퍼키

바이너리 릴레이션십의 프라이머리 키

  • 다대다: 가장 미니멀한 수퍼키
  • 일대다: 다 측면에 있는 수퍼키
  • 일대일: 두 엔티티 셋의 수퍼키 중 하나

약한 엔티티 셋

  • Weak Entity Sets
  • 특정 어트리뷰트가 다른 엔티티에 의존적일 때 불필요한 데이터 중복 발생 → 중복 발생하는 어트리뷰트를 해당 엔티티에서 삭제할 수 없는 상황
  • 다른 엔티티(identifying entity) 자체에 의존적인 어트리뷰트 값만을 할당한 새로운 종류의 엔티티 생성 → 중복 어트리뷰트를 단일화
  • 약한 엔티티 셋은 프라이머리 키보다 discriminator를 통해 유니크하게 표시

    약한 엔티티 셋이 아닌 모든 엔티티 셋은 강한 엔티티 셋(strong entity set)이다!

약한 엔티티 셋의 다이어그램

  • 테두리가 더블 라인인 사각형을 통해 약한 엔티티 셋 표시
  • 대시 라인을 통해 약한 엔티티 셋의 discriminator 표시
  • 약한 엔티티 셋과 식별 엔티티 셋 간의 릴레이션십 셋은 테두리가 더블 라인인 마름모로 표시

    section 엔티티의 프라이머리 키는 sec_id, semester, year과 함께 sec_course라는 어트리뷰트까지 포함한 총 네 개로 구성되어 있다! 약한 엔티티 셋으로 판명된 sec_course는 이 엔티티를 다이어그램으로 그릴 때에만 빠트린 채 그린 것에 불과하다!

중복 어트리뷰트

  • ER 다이어그램을 그릴 때 릴레이션십 셋에 속하는 엔티티 간 중복 어트리뷰트가 존재한다면 제거되엉 함
  • 실제 SQL 쿼리문의 테이블로 전환할 때에는 이때 제거된 어트리뷰트가 다시 들어가야 함

릴레이션 스키마 표현

  • ER 다이어그램으로 표현된 데이터베이스를 스키마 형태로 표현
  • 엔티티 셋, 릴레이션십 셋 모두 각각 릴레이션 스키마로 표현

엔티티 셋 표현

  • 강한 엔티티 셋: 다이어그램의 어트리뷰트와 상동
  • 약한 엔티티 셋: 다이어그램에 표시된 어트리뷰트 + 강한 엔티티 셋을 식별하는 프라이머리 키

Composite 어트리뷰트를 가진 엔티티 셋

  • composite: 특정 어트리뷰트의 하위 어트리뷰트가 존재할 때 → 여러 개의 단일 어트리뷰트로 표현

Multivalued 어트리뷰트를 가진 엔티티 셋

  • multivalued: 특정 어트리뷰트에 대한 값이 여러 개일 수 있을 때 → 해당 값만큼 튜플 중복 생성, multivalued 값의 개수만큼 중복 삽입

릴레이션십 셋 표현

  • 다대다: 두 엔티티 셋의 프라이머리 키에 대한 어트리뷰트
  • 일대다: 다 측면의 프라이머리 키
  • 일대일: 둘 중 하나의 프라이머리 키

릴레이션십 셋의 스키마 중복 이슈

  • 일 대 다 관계에서 다가 total이라면 다 엔티티 셋에 일 엔티티 셋의 프라이머리 키를 추가하는 것으로 별도의 스키마를 만드는 것을 방지할 수 있음
  • E.g.) instructor 릴레이션은 department 릴레이션과 일 대 다 관계로 total으로 표현되어 있다. inst_dept라는 릴레이션 십 셋을 별도로 스키마화하는 것보다, department (일 측면)의 프라이머리 키 dept_name을 해당 instructor 릴레이션의 어트리뷰트로 추가하는 것으로 스키마 중복을 피할 수 있다.
  • 약한 엔티티 셋과 참조 엔티티 셋 간의 릴레이션십 셋을 별도로 스키마로 옮기는 것은 불필요한 스키마 중복 이슈.

Specialization

  • Top-Down: 엔티티 셋의 하위 그룹을 통해 표현
  • 어트리뷰트 상속: 동일한 어트리뷰트를 가지는 부모/자식 엔티티 존재
  • Overlapping: personemployee, student 모두 가능
  • Disjoint: employeeinstructorsecretary 중 하나여야 함(서로소)

Specialization의 스키마 표현

  1. 가장 높은 레벨의 엔티티 생성, 낮은 레벨의 엔티티를 만들며 내려오기

    person부터 생성, employeestudent를 만든다. 이때 employee 등은 ID라는 프라이머리 키와 별개의 로컬 어트리뷰트인 salarytot_credits만 만든다.

  • employee 릴레이션 값을 조회하기 위해서는 해당 릴레이션이 상속하고 있는 person의 릴레이션 어트리뷰트까지 모두 알아야 함
  1. 각 릴레이션 별로 모든 어트리뷰트를 포함하기
  • 어트리뷰트 중복이 빈번히 발생하는 단점이 있다.

Generalization

  • Specialization 기법과는 달리 바텀-업 디자인 프로세스로 여러 개의 엔티티 셋을 묶어 더 높은 레벨의 엔티티 셋을 만듦

Completeness 제약 조건

  • 높은 레벨의 엔티티 셋의 엔티티가 generalization을 하는 낮은 레벨의 엔티티 셋 중 하나에 속해 있는지 확인하는 제약 조건
  • total: 엔티티가 낮은 레벨 엔티티 셋에 속해야 함
  • partial: 디폴트 상태. 엔티티가 낮은 레벨 엔티티 셋에 속할 필요 없음.
profile
JUST DO IT

0개의 댓글