Contents

03_SQLD_제4 절 관계 & 제5 절 식별자

# SQL


제1 장 데이터 모델링의 이해


제4 절 관계(Relationship)

  1. 관계의 개념

    • 관계의 정의

      인스턴스 사이의 논리적인 연관성으로서 존재의 형태 or 행위로서 서로에게 연관성이 부여된 상태

    • 관계의 페어링

      관계인스턴스가 개별적으로 관계를 가지는 것(페어링)이고, 이것의 집합을 관계로 표현하는 것”

      “따라서 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면, 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 도 있다.”

  2. 관계의 분류

    • ERD : 존재의 의한 관계 / 행위에 의한 관계

    • UML(Unified Modeling Language) : 연관 관계 / 의존 관계

  3. 관계의 표기법

    • 관계명(Membership) : 관계의 이름을 기록

    • 관계차수 : 엔터티간의 관계에서 참여자의 수를 표현

      1. 1 : 1

      2. 1 : N

      3. N : N

    • 관계선택사양

      • 필수 관계(Mandatory)

        ex) 지하철은 반드시 이 닫혀야, 출발할 수 있다. 에서 “문 닫힘” & “출발” 은 필수참여관계(Mandatory)이다.

      • 선택 관계(Optional)

        ex) 지하철의 출발을 알리는 안내음성이 나온다. 에서 “안내음성"은 나오면 좋지만 “출발"과 필수적인 관계는 아닌 선택적인(Optional) 관계이다.

  4. 관계의 정의 및 읽는 방법

    • 관계 체크사항

      1. 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?
      2. 두 개의 엔터티 사이에 정보의 조합이 발생하는가?
      3. 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
      4. 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb)가 있는가?
    • 관계 읽기

      1. 기준(Source) 엔터티를 한 개(One) 또는 각(Each)으로 읽는다.

      2. 대상(Target) 엔터티의 관계참여도 단수, 복수로 읽는다.

      3. 관계선택사항과 관계명을 읽는다.


제5 절 식별자(Identifiers)

  1. 식별자(Identifiers) 개념

    • 엔터티를 대표할 수 있는 속성

    • 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다.

    • 식별자는 엔터티내에서 인스턴스들을 구분할 수 있는 구분자다.

  2. 식별자의 특징

    • 주식별자

      • 유일성 : 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다.
      • 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
      • 불변성 : 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
      • 존재성 : 주식별자로 지정되면 반드시 값이 들어와야 한다.
    • 외부식별자

      • 참조무결성 제약조건(Referential Integrity)에 따른 특징을 가진다.

  3. 식별자의 분류 및 표기법

    • 식별자 분류


      • 주식별자 : 엔터티 내에서 대표성을 가지는 식별자 (대표성이 있어 참조 연결 가능)

      • 보조식별자 : 엔터티 내에서 대표성을 가지지 않는 식별자 (대표성이 있어 참조 연결 불가능)


      • 내부식별자 : 엔터티 내에서 스스로 생성된 식별자

      • 외부식별자 : 타 엔터티와의 관계를 통해 받아오는 식별자


      • 단일식별자 : 하나의 속성으로 구성된 식별자

      • 복합식별자 : 둘 이상의 속성으로 구성된 식별자


      • 본질식별자 : 원래 있던 식별자 (업무에 의해 만들어지는 식별자)

      • 인조식별자 : 새롭게 만든 식별자 (인위적으로 만든 식별자)


    • 식별자 표기법

  4. 주식별자 도출 기준

    1. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.

    2. 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면, 주식별자로 지정하지 않는다.

      (차라리 새로 생성!)

    3. 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.

  5. 식별자관계와 비식별자관계에 따른 식별자 구분

    1. 식별자관계 or 비식별자관계의 결정방법

      • 부모엔터티 쪽의 주식별자를 자식엔터티의 속성으로 내려 보낸다.
      • 이때 자식엔터티는 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 써도 되며 ( == 식별자 관계), 단순히 부모와 연결되는 속성으로만 이용 ( == 비식별자 관계) 할 것인지 결정한다. 이때 외부식별자는 Foreign Key 역할을 한다.
    2. 식별자 관계

      → 부모엔터티로 부터 속성을 받고, 이를 자식엔터티에서 주식별자로 사용 하는 경우 - 식별자 관계

      • 부모로 부터 받은 속성을 자식이 주식별자로 사용하면 / 부모와 자식의 관계는 1:1

      • A부모 엔터티로부터 받은 속성a와 B부모 엔터티로부터 받은 속성b를 포함하거나 / 스스로 가지고 있는 속성과 함께 주식별자를 구성하면 / 부모와 자식의 관계는 1:M

    3. 비식별자 관계

      → 부모엔터티로 부터 속성을 받았지만, 자식엔터티에서 주식별자가 아닌 일반 속성으로 사용하는 경우 - 비식별자 관계

    4. 식별자 관계로만 설정할 경우 문제점

      • 주식별자의 속성이 지속적으로 증가하는 경우 - 복잡성↑ 하고 오류가능성 유발
    5. 비식별자 관계로만 설정할 경우 문제점

      • 상속의 개념이 없어, 쓸데없이 부모엔터티까지 찾아가서 데이터를 관리해야 하는 경우 발생
    6. 식별자관계 & 비식별자관계 모델링

      1. 비식별자관계 선택 프로세스

        → 선택적으로 식별자, 비식별자를 구성 (난이도가 높다.)

      2. 식별자와 비식별자관계 비교

      3. 식별자와 비식별자를 적용한 데이터 모델 (예시)