관계 이야기

장우솔·2024년 6월 12일
0

데이터베이스

목록 보기
6/7

관계 의미

관계란?
두 개 이상의 엔터티 간에 존재하는 연관성

  • 단, 논리적인 연관성이 있어야하고, 바로 상위 관계여야한다. (논리적 연관성을 물리적으로 구현한 것이 “참조 무결성 제약”이다)

  • 관계는 속성의 일부이다. = 실체가 존재한다 = 조인도 양쪽 속성이 존재해야 가능하다

  • 관계선은 참조무결성 제약으로 생성해서 실체화한다.

*관계형 데이터베이스 핵심 원리
데이터 중복하지 않고,
한 군데서만 관리하기
필요할 때 연결(join)해서 보기

*참조무결성 제약
엔터티의 외래 식별자 속성 값은 참조되는 엔터티의 주 식별자 값과 일치하거나 NULL값이어야 한다

관계의 필요성
릴레이션은 조인해서 보면 되기 때문에 분해할 수 있을 때까지 분해한다. 이후 연결해서 사용하기 위해 관계가 필요하다.

관계선이 의미하는 것

  • 업무규칙 : 종속관계, 참조관계로 구분하여 두 엔터티가 얼마나 밀접하게 연관됐는지 보여준다.

  • 업무 프로세스 : 업무의 흐름을 의미한다.

  • 조인 : 관계선은 데이터를 조회할 때 조인하는 경로

  • 입력순서 : 상위->하위 엔터티 순서로 생성되니까 관계선으로 볼 수 있다.

어떤 관계를 설계해야할까? (세 가지 모두 만족)

  1. 속성으로 관리하려는 관계 : 관리하고자 하는 관계인지 따지고, 추출관계는 제외한다.

  2. 참조 무결성 관계 : 참조하는 데이터 간에 결점이 없는 것/ 참조한다(관계선으로 연결됐다)
    참조 무결성 제약이 존재하면, INSERT – 상위 먼저/ DELETE – 하위 먼저

  3. 바로 상위의 1차 관계 : 바로 상위 엔터티 하나와의 관계만 관계선으로 표현해야 한다.

  • 더 상위 엔터티와의 관계 : 추출(중복) 관계

관계선 표현할 때
두 엔터티의 공통 속성인 식별자로 조인할 수 있는 경우에만

관계선의 구성요소

  • 관계비 : 하나의 인스턴스와 관계있는 상대 인스턴스 개수
  • 관계 존재성 : 하나의 인스턴스와 관계있는 상대 인스턴스의 존재 여부
  • 관계 타입 : 관계 상속 식별로 하는지 (실선-식별/점선-비식별 관계)
  • 관계 참여수 : 관계선과 연관된 엔터티 개수
  • 관계 명 : 가독성 높이기 위해 사용

관계비

상위 엔터티의 한 개의 인스턴스가 하위 엔터티의 몇 개의 인스턴스와 연관이 있는지를 의미

관계비 특징
-관계를 분석하는 첫 단계
-관계비를 분석할 때는 업무적인 요건으로만 판단해야한다. : 특정 시점을 기준으로 하지 않고 발생할 수 있는 가능성을 보고 판단한다.
-이력데이터 제외하고 원천데이터만으로 분석해야한다.

관계비 종류
일대일(1 : 1), 일대다(1 : M), 다대다(M:M) 관계가 있다.

*최종 물리모델에서는 1:1과 1:M만 발생한다. 따라서 M:M관계는 두개의 1:M관계로 만들어야한다. 이 과정에서 교차 엔터티가 생긴다.

<일대일 관계>

  1. 업무 규칙에 의한
    : 현재 유효한 데이터 간의 관계를 의미 -> 과거의 모든 시점을 고려하는 것이 아니라, 특정 시점을 기준으로 유효한지 파악한다.(이력데이터X)

통합 주의 : 성격이 구별되는 데이터 합치면 확장성이 떨어진다. 또한 엔터티 속성이 다른 엔터티 속성이라 생각하고 끝까지 고착될 가능성이 크다.

  1. 성능이나 관리 측면에서 발생하는 인위적인
    : 대부분이며 종류도 다양하다

아래와 같은 일대일 관계는 데이터 본질이 같으므로 하나의 엔터티다.

  • 속성 중에 묶을 수 있는 속성을 다시 엔터티로 도출하는 것은 일대일로 나누는 데 의미가 없다.

  • 널 값을 포함한 속성이 있다면 그 속성만 분해하는 것도 고려할 수 있다. 단독으로 취득되거나 해당 데이터만 별도로 조회하는 요건이 있는 경우 일대일 관계의 별도 엔터티로 설계할 수 있다.

관계 속성과 엔터티

  • 관계 속성 : 데이터 생성 순서 개념 있음 -> 하위 엔터티 속성의 데이터는 상위 엔터티 속성에 존재해야 하기 때문 (한정적)
  • 관계 엔터티 : 관계 속성을 모아서 관리하는 엔터티, 연관 관계가 많아질 가능성이 있다면 엔터티로 관리

관계의 분류법

- 인스턴스 생성 시 필요 여부에 따른 분류

  • 종속 관계 : 부모 엔터티와 자식 엔터티 간의 관계(부모 엔터티가 없으면 자식 엔터티가 존재할 수 없다)
    • 데이터 종속: 데이터가 본질적으로 종속
    • 업무적 종속: 업무적으로 종속 관계
  • 참조 관계 : 어떤 엔터티와의 연관성을 관리하려는 관계

- 주 식별자 상속 방법에 따른 관계

  • 식별 관계 : 상위 엔터티의 주 식별자를 하위 엔터티로 상속할 때 주 식별자에 포함시키는 관계
  • 비식별 관계 : 상위 엔터티의 주 식별자가 하위 엔터티로 상속될 때 일반 속성에 포함되는 관계

관계종류 1 : 배타 관계

두 개 이상의 상위 엔터티와 관계를 가지며 그 관계(상위 간)가 상호배타적일 때의 관계

배타 관계 특징

  • 하위 엔터티의 하나의 인스턴스는 상위 엔터티 중에서 하나의 엔터티와만 관계를 갖는다.
  • 배타관계를 발생시킨 엔터티는 일반적으로 서브타입 후보다. 따라서 배타관계를 발생시킨 엔터티는 통합대상이다.

-> 통합되면 배타관계 발생x 단, 상위 엔터티의 성격이 다를 때는 통합할 수 없다.

배타 관계 속성으로 구현하는 방법

배타 관계 속성 관리 방법

1. 배타관계 속성을 개별적인 주 식별자로 관리
-> 관계없는 인스턴스에서는 기본 값 사용

  • 장 : 가독성 좋다, 데이터 발생 명확 / 단 : 식별자 속성 값에 논리적으로는 널 값을 사용한다.
    **
  1. 두 개의 속성 하나로 통합 **
  • 단 : 주 식별자 값이 가변의 의미를 지닌다

3. 배타 관계 속성 중 하나만 주 식별자로 설계

  • 공통으로 필수로 존재하는 값을 기준으로 순번을 사용해서 관리
  • 단 : 업무규칙도 표현 안되며, 주 식별자 본연의 기능에 다른 기능이 혼합돼 혼란스러운 모델이 된다.

4. 인조 식별자 사용

  • 장 : 배타관계 속성이 일반속성으로 사용돼 확장성이 좋고, 하위 엔터티 존재하면 모델 단순하게 만들 수 있다
  • 단 : 인조 식별자가 업무적으로 사용되지 않을 수 있다.

관계종류 2 : 재귀 관계

특정 인스턴스가 같은 엔터티의 다른 인스턴스와 관계를 가지는 관계

재귀 관계 발생할 때
1. 계층 데이터 관리할 때 – 종속관계와 유사
2. 자기 참조 데이터 관리할 때 – 참조관계와 유사

계층
계층 조직을 설계방법은 변화에 취약하다. 중간 계층이 없어지면 관리하기 모호해지는 모델이다. 계층 성격의 데이터는 본질적으로 가변적이기 때문에 재귀관계로 관리한다.

계층 관계 엔터티 판단 기준
: 여러 엔터티가 관리하는 속성이 유사하고, 엔터티 사이에 소속 개념이 존재

자기 참조
: 엔터티의 한 인스턴스가 자신의 엔터티에 존재하는 다른 인스턴스를 참조할 때
Ex) 정정주문 발생하면 원주문 재귀관계로 관리

관계 검증

잘못 설계한 관계선

  1. 엔터티 간에 연관성이 존재하는데 관계를 표현하지 않은 것

  2. 연관성이 없는데도 관계를 표현한 것
    -> 모델 가독성 떨어지고 모델을 오해하게 만든다. 정합성 문제 우려

    1) 1차관계 위반 모델
    2) 참조 무결성 관계 위반 모델
    3) 기타
    - 주 식별자가 같을 때(참조 무결성관계x)
    - 상속받은 관계 속성이 상위 엔터티 주 식별자 순서와 일치하지 않을 때
    - 식별, 비식별로 분리해서 상속할 때
    - 복합 주 식별자를 하나의 속성으로 변환해서 상속할 때
    - NULL/Not NULL 혼용
    - 원천, 백업 데이터 관계선 표현 ->안해야한다.

관계 검증
1. 관계 속성이 화면에 사용되었는지
2. 쿼리의 조인 구문을 분석해 관계선과의 매핑을 통해 검토하기
3. 고립된 엔터티, 일대일 관계, 양방향 관계나 순환 관계 별도로 검토
4. 배타 관계를 발생시킨 엔터티 통합할 수 있는지 검토
5. 관계선이 표현된 엔터티에 대해서 데이터 사이에 참조무결성제약이 있는지, 1차 관계인지 검토
6. Etc 검토,,

모델 복잡성 우선 – 관계선 생략
데이터 무결성 우선 – 관계선 생략X

profile
공부한 것들을 정리하는 블로그

0개의 댓글