학교/SQLD

[SQLD] 1.1.4. 관계 / 1.1.5. 식별자

daykim 2022. 3. 9. 16:12

관계


관계

  • 엔터티의 인스턴스 사이의 논리적인 연관성으로서, 존재의 형태나 행위로서 서로에게 연관성이 부여된 상태
  • ex ) [강사]가 [수강생]을 가르친다.

 

관계의 패어링 (Paring)

  • 패어링 : 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것
  • 관계 : 패어링의 집합
  • 관계 패어링 : 각 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태

 

UML(Unified Modeling Language)

  • 연간관계
    • 존재적 관계, 실선으로 표현
    • ex) DB팀에 만쥬사원이 소속되어 있다. => DB팀과 만쥬사원은 존재의 형태
  • 의존관계
    • 행위에 의한 관계, 점선으로 표현
    • ex) 고객이 주문을한다. => 고객과 주문은 행위에 의한 관계

 

관계 표기법

관계명

  • 엔터티가 관계에 참여하는 형태
  • 관계시작점 : 관계가 시작되는 편
  • 관계끝점 : 관계를 받는 편
  • 관계 시작점과 끝점은 모두 관계 이름을 가져야 한다.
  • 참여자의 관점에 따라 능동적이거나 수동적으로 명명된다.
  • 애매한 동사는 피하고, 현재형으로 표현한다.

 

관계차수

  • 두 개의 엔터티간에 관계에서 참여자의 수를 표현하는 것
  • 1:1, 1:M, M:M

까마귀발 모델

 

관계선택사양

  • 필수참여관계 (Mandatory)
    • 참여하는 모든 참여자가 반드시 관계를 가지는, 타 엔터티의 참여자와 연결이 되어야 하는 관계다.
  • 선택적인관계 (Optional)
    • 참여자가 반드시 관계를 가질 필요는 없는 관계다.

  • 선택참여 하는 엔터티 쪽에 O를 표시한다.
  • 필수참여는 아무런 표시하지 않는다.
  • 0:0 관계가 된다면, 잘못될 확률이 많다.

 

식별자


식별자

  • 엔터티 내에서 인스턴스들을 구분할 수 있는 구분자
  • 하나의 엔터티에 구성돼 있는 여러 개의 속성중, 엔터티를 대표하는 속성을 의미
  • 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다.
  • Key와 동일하게 생각할 수 있지만, 키는 물리 데이터 모델링 단계에서 사용한다.

 

식별자 특징

  • 유일성
    • 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분
  • 최소성
    • 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수여야 한다.
  • 불변성
    • 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않는다.
  • 존재성
    • 주식별자가 지정되면 반드시 데이터 값이 존재한다.
    • Null 안 된다.

 

식별자 분류 및 표기법

  • 대표성 여부 : 자신의 엔터티 내에서 대표성을 가지는가
    • 주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자, 타 엔터티와 참조관계를 연결할 수 있는 식별자
    • 보조식별자 : 엔터티 내 각 어커런스 구분은 가능하나, 대표성을 가지지 못해 참조관계 연결이 불가한 식별자
  • 스스로 생성 여부 : 엔터티 내에서 스스로 생성되었는가
    • 내부식별자 : 엔터티 내부에서 스스로 만들어지는 식별자
    • 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
  • 속성 수 : 단일 속성으로 식별이 되는가
    • 단일식별자 : 하나의 속성으로 구성된 식별자
    • 복합식별자 : 둘 이상의 속성으로 구성된 식별자
  • 대체 여부 : 원래 업무적 의미가 있던 식별자 속성을 대체해 새롭게 만든 식별자를 구분
    • 본질식별자 : 업무에 의해 만들어지는 식별자
    • 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

 

주식별자 도출기준

  • 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
  • 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
    • 명칭이나 내역이 있고, 인스턴스들을 식별할 수 있는 다른 구분자가 존재하지 않을 경우는 새로운 식별자를 생성한다.
  • 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.

 

식별자 관계와 비식별자 관계에 따른 식별자

  • 외부식별자 : 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성으로, 데이터베이스 생성 시 Foreign Key 역할을 한다.
  • 이 때, 자식 엔터티는 부모엔터티로부터 받은 외부 식별자를 자신의 주식별자로 이용할 것인지 || 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정해야 한다.

식별자 관계 (Identifying Relationship)

  • 부모로부터 받은 식별자를 자식 엔터티의 주식별자로 이용하는 경우
    • Null 값이 오면 안되니, 반드시 부모 엔터티가 생성되어야 자식 엔터티가 생성되는 경우다.
    • 부모로부터 받은 속성만으로 주식별자를 사용한다면, 부모와 자식 관계는 1:1 일 것이다.
    • 부모로부터 받은 속성을 포함해 다른 속성과 함께 주식별자를 구성하면 1:M 관계다.
  • 이처럼 자식엔터티의 주식별자로 부모의 주식별자가 상속되는 경우를 식별자 관계라고 한다.

비식별자 관계 (Non-Identifying Relationship)

  • 부모엔터티로부터 속성을 받았지만, 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우다.
    • 자식 엔터티에서 받은 속성이 반드시 필수가 아니어도 무방해, 부모 없는 자식이 생성될 수 있는 경우
    • 엔터티별 데이터의 생명주기를 다르게 관리할 경우 (ex. 부모가 자식보다 먼저 소멸)
    • 여러개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데, 각각의 엔터티가 별도의 관계를 가질 때
    • 자식 엔터티에서 별도의 주식별자를 생성하는 것이 유리하다고 판별될 때

 

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

  • 한개의 속성만을 PK로 가지는 엔터티가 자식, 자식의 자식, 그 자식의 자식에서 해당 속성을 물려줄 때, 1:M의 관계를 만들기 위해선 자식들은 부모 PK 개수 + 1 개를 PK로 가지게 된다.
  • 식별자 관계만으로 연결된 데이터 모델은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조다.
  • 이렇게 주식별자속성이 많은 경우 JOIN 등을 할 때 누락을 하는 등 복잡성과 오류 가능성을 유발시킬 수 있는 요인이 될 수 있다는 것을 기억해야한다.

비식별자 관계로만 설정할 경우의 문제점

  • 자식엔터티에서도 조회 조건으로 다수 사용되는 속성을 비식별자 관계로 설정할 경우, 자식 엔터티 데이터로 상속되지 않아, 데이터를 처리할 때 쓸데없이 부모 데이터까지 찾아가야 하는 경우가 발생한다.
  • 즉, 불필요한 조인이 다량으로 발생하며 SQL 구문도 길어지고, 성증이 저하되는 현상이 발생된다.

===> 이 두가지 경우에 대해서 일정한 규칙을 가지고 데이터 모델링을 하는 기술이 필요하다. 이는 다음에 설명된다.

 

식별자관계와 비식별자관계 모델링

  1. 비식별자 관계 선택 프로세스
    • 기본적으로 식별자 관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자 관계로 조정하면 된다.
    • 관계의 강/약 분석 : 약한 관계
    • 자식 테이블 독립 PK 필요 : 독립 PK 필요
    • SQL 복잡도 증가, 개발 생산성 저하 : PK 속성 단순화
  2. 식별자와 비식별자 비교
  식별자 관계 비식별자 관계
목적 강한 연결관계 표현 약한 연결관계 표현
자식 주식별자 영향 자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
표기법 실선 표현 점선 표현
연결 고려사항 - 반드시 부모 엔터티 종속
- 자식 주식별자 구성에 부모 주식별자 포함 필요
- 상속받은 주식별자 속성을 타 엔터티에 이전 필요
- 약한 종속관계
- 자식 주식별자 구성을 독립적으로 구성
- 상속받은 주식별자 속성을 타 엔터티에 차단 필요
- 부모쪽의 관계 참여가 선택 관계