DB 1. ER 모델링

skh951225·2023년 3월 24일
0

데이터베이스

목록 보기
1/7

데이터베이스 KOCW

무결성, 제약조건

https://jerryjerryjerry.tistory.com/50

trigger & assertion

Trigger : 명시된 이벤트가 발생할 때마다 자동으로 사용자가 정의한 일이 수행되는 것

  • ECA(Event-Condition-Action) 순으로 동작

Assertion : 제약조건이 만족되지 않는 이벤트는 수행되지 않음

개념적 수준의 모델링(ER model)

Entity-Relationship 은 개념적 수준의 모델링의 사실상 표준이다.

Entity : 고유하게 식별이 가능한 객체

  • Strong entity : 혼자 키를 형성할 수 있음
  • Weak entity : identifying/owner entity 와의 관계에 참여해서 키 속성을 제공 받아야 의미를 가짐, 자체적으로 partial key를 가지고 있지만 중복될 수 있음

Attribute : Entity를 설명하는 속성

  • Simple attribute : 더이상 다른 속성로 나눠지지 않음

  • Composite attribute : 다른 속성으로 나눠짐 (eg. 주소)

  • Single-valued attribute : 하나의 값만 가지는 속성

  • Multi-valued attribute : 여러 개의 값을 가질 수 있는 속성

  • Stored attribute : 값이 저장된 속성

  • Derived attribute : 다른 속성의 값으로부터 얻어지는 속성 (나이 -> 생년월일로 계산 가능)

Relation : entity를 연결/mapping 시켜주는 관계

  • 관계는 attribute를 가진다
  • 관계는 key를 가지지 않고 관계를 가지는 entity의 key를 통해 key의 역할을 함
  • Degree : 관계로 연결된 엔티티 타입들의 개수
  • Cardinality : 관계에 참여하는 엔티티간의 매핑관계(1:1, 1:N, M:N, M:1)
  • Role : 엔티티가 관계에 참여하는 역할
  • 전체참여 : 모든 엔티티가 관계에 참여/ 부분참여: 모든 엔티티가 관계에 참여할 필요 없음

논리적 모델링

ER 스키마를 논리적 스키마로 설계하는 것

  1. 엔티티 타입과 단일 값 애트리뷰트
  • 정규 엔티티 타입
    • 엔티티의 attribute를 릴레이션에 모두 포함시키면됨
    • 복합 어트리뷰트의 경우 복합 어트리뷰트를 포함해 릴레이션에 포함시키면 됨.
    • 한계 : 이 경우 복합 어트리뷰트에서 나온 어트리뷰트가 복합 어트리뷰트에서 기인했다는 것을 표현할 방법이 없음(문서로 표현하는 것 이외에)
  • 약한 엔티티 타입 : identifying/owner entity의 key를 약한 엔티티에 foreign key로 포함시키면됨, weak entity의 partial key와 owner entity의 key로 기본 key를 구성함
  1. 2진 관계 타입
  • 2진 1:1

방법 1,2 : 하나의 엔티티를 정해 다른 엔티티의 기본 키를 외래키로 포함시켜 관계를 표현할 수 있음

  • 외래키가 어떤 관계를 표현한다는 것을 표현할 방법이 없음(문서로 표현하는 것 이외에)
  • 어느 방향으로 엑세스하느냐에 따라 성능에 차이가 있을 수 있음(참조키를 찾는것과 기본키를 찾는 것의 속도차이가 존재하기때문, 기본키는 보통 인덱스로 찾을 수 있음)
  • 관계에대한 어트리뷰트는 참조키를 가지는 릴레이션에 포함시킴, 어트리뷰트간의 혼동이 올 수 있음(해당 엔티티의 어트리뷰트인지, 관계에 대한 어트리뷰트인지)

방법3 : 두 엔티티의 기본키로 관계를 위한 릴레이션을 생성하는 방법

  • 관계에 해당하는 어트리뷰트를 관계를 위한 릴레이션에 저장할 수 있어 관계를 위한 어트리뷰트와 엔티티의 어트리뷰트를 구분할 수 있음
  • 하지만 관계에 대한 정보를 보기위해선 JOIN을 2번해야함.(JOIN의 오버헤드는 굉장히 크다. 그래서 JOIN을 최소화하기 위해 관계를 최소화하는 것이 중요)

방법4 : 어차피 1:1인데 하나의 릴레이션으로 합치자

  • 엔티티를 의미단위로 나눠서 릴레이션으로 표현했었는데 이것을 합치면 의미단위가 모호해짐
  • 어트리뷰트가 어떤 엔티티에 속하는지 혼동이 올 수 있음
  • 하지만 퍼포먼스는 가장 좋음
  • 정규 2진 1:N > 방법1 : cardinality 가 N인 릴레이션에 1인 엔티티의 키를 외래키로 가진다.
  • 1쪽에 붙이게 되면 똑같은 내용이 반복되어야 해서 쓰면안된다.
  • 관계에대한 어트리뷰트는 참조키를 가지는 릴레이션에 포함시킴, 어트리뷰트간의 혼동이 올 수 있음(해당 엔티티의 어트리뷰트인지, 관계에 대한 어트리뷰트인지)
  • 하지만 실용적이고 릴레이션이 줄어들어서 좋다.

방법2 : 관계를 위한 릴레이션을 만드는 방법

  • 관계에 해당하는 어트리뷰트를 관계를 위한 릴레이션에 저장할 수 있어 관계를 위한 어트리뷰트와 엔티티의 어트리뷰트를 구분할 수 있음
  • JOIN에 대한 오버헤드가 발생
  • 2진 M:N > M:N 의 경우 관계를 위한 릴레이션을 만들어 줘야함
  1. 3진 이상의 관계 타입
  • 3진 관계 타입 : 관계에 대한 릴레이션을 만들면됨
  1. 다치 애트리뷰트
  • 다치 에트리뷰트 : 어트리뷰트에 대한 릴레이션을 따로 만들어 주면됨

0개의 댓글