DB모델링 - 엔터티, 관계

MIN.DI·2021년 5월 25일
1

모델링

목록 보기
1/2

엔터티 ENTITY

발생시점에 따른 엔터티 분류

  • 기본 엔터티(FUNDAMENTAL ENTITY) = KEY 엔터티
    : 해당 업무에 기본적으로 존재하는 정보.
    상위엔터티 없이 독자적으로 생성. (사원, 부서 엔터티)
  • 중심 엔터티(MAIN ENTITY)
    : 업무에 핵심적인 역할을 하는 정보.
    상위 엔터티로부터 생성. (접수, 계약 엔터티)
  • 행위 엔터티(ACTION ENTITY)
    : 기본과 중심 엔터티을 근간으로 업무가 흘러가면서 발생되는 엔터
    티 (주문내역, 계약진행 엔터티)

기본, 중심 엔터티를 묶어서 핵심엔터티라고 한다.

엔터티 작성 예 - 엔터티 정의서

업무 시나리오

  • 인터넷에서 도서를 구입하기 위해서는 반드시 우리 회사에 회원으로 등록해야 구매가 가능하다.
  • 인터넷에 회원 등록하는 정보로는 회원번호, 주소, 전화번호, 전자메일, 휴대폰번호, 결제방법이 있다.
  • 인터넷을 통해 등록된 회원은 구매하기 위한 도서목록을 선택하고 인터넷 주문양식에 주문내용을 입력하여 주문한다.
  • 주문서 양식에는 주문목록에 대한 상세 정보와 주문일자, 배송지주소, 배송지전화번호, 배송방법, 결제방법이 있다.
  • 주문목록에 대한 상세 정보로는 구매가격, 개수가 있다.
  • 한번 등록된 회원에 대해서는 도서를 구매하는 실적에 따라 구매 포인트를 부여하여 다음 구매시 혜택을 보게 한다.

'회사' 는 인스턴스가 하나 뿐이므로 엔터티가 될 수 없다.


관계 RELATIONSHIP

관계의 3요소는 방향, 관계차수(Cardinality), 선택성 이다.

관계의 명명

: 애매한 동사는 피하고 현재형으로 표현

관계차수 (Cardinality)

: 두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것. 1:1, 1:M, M:N
: 한 인스턴스라도 한 개 이상인 경우가 있다면 M이다.

선택성 (필수/선택)

  • Mandatory : 두 엔터티 간에 관계가 설정되었을 때, 항상 두 엔터티의 모든 인스턴스간에 관계가 존재
  • Optional : 모든 인스턴스에 대하여 존재할 필요가 없음. 일반적이고 상식적인 선에서 판단한다.

각 부서에는 여러 사원을 포함할지도 모른다. (Optional)
각 사원은 단 하나의 부서에 소속된다. (Mandatory)

관계의 형태

  • 1 : 1 관계
    어느쪽이든 어느 한 쪽의 식별자를 다른 쪽의 관계속성(외래키)으로 둔다.

    (1) 사원 엔터티의 사원번호를 컴퓨터 엔터티의 FK로 둠.
    (2) 컴퓨터 엔터티의 장비번호를 사원 엔터티의 FK로 둠.
  • 1 : N 관계
    1쪽의 식별자를 N쪽의 관계속성(외래키)로 둔다.

  • M : N 관계
    초기 분석모델에서는 존재할 수 있지만, 최종 완성된 논리모델에서는 M:N 관계가 있어선 안된다. (분석이 덜 된 것이다.)
    -> 양 쪽의 식별자를 합쳐서 복합KEY를 주 식별자로 하는 새로운 엔터티를 생성한다.
    -> 위의 규칙이 업무적인 상황에 적용되지 않을 경우에는 부분적으로 일련번호(ex.주문번호, 순번 등)를 부여하는 부분 인조식별자 속성을 추가한다.
    -> 병렬관계를 추가한다. (이 경우 관계조건이 제한된다는 단점이 있다.)

관계의 종류

  • 순환(재귀적) 관계 (1 : N)


위와 같은 구조에서 루트 데이터 A는 아래로만 연결, 리프 데이터 D, E는 위로만 연결되어 있으므로 Optional 임을 알 수 있다.
(Mandatory 라면 위, 아래로 모두 연결되어있어야 함)

  • 순환관계 (M : N) = BOM 모델

    부품 엔터티는 M:M으로 순환되는 관계이다.
    논리모델에는 M:N 관계가 있어선 안되므로 부품 A, 부품 B 의 식별자를 합친 복합키를 주식별자로 하는 구성부품 엔터티를 생성한다.
    이 때 A, B의 식별자명이 같으므로 부품 B의 식별자명은 '구성부품코드' 로 한다.
    이후 1:N 재귀적관계와 같이 해소한다.

  • 병렬 관계

    두 엔터티 사이에 두 개 이상의 관계가 발생하는 경우.
    두 관계에 대한 rolename을 다르게 주어 관계속성으로 둔다.

profile
내가 보려고 쓰는 블로그

0개의 댓글