관계형 데이터 모델링 프리미엄 가이드 DB구축 (2014년)
관계 종류 0 0 53,814

by 구루비스터디 관계 Relationships [2018.06.10]


10.5 관계 종류

  1. 10.5 관계 종류
    1. 1:1 관계
    2. 그림 10.79 일대일 관계
    3. 그림 10.80 일대다 관계
    4. 그림 10.81 바람직하지 않은 실체 엔터티의 주 식별자
    5. 그림 10.82 일대일 관계를 합체한 엔터티
    6. 그림 10.83 속성 하나가 엔터티로 도출된 모델
    7. 그림 10.84 일대일 관계가 발생하는 서브타입 모델
    8. 그림 10.85 널 속성을 별도의 엔터티로 분리한 모델
    9. 그림 10.86 자주 사용되지 않는 속성을 별도의 엔터티로 분리한 모델
    10. 그림 10.87 엔터티를 분리해 락(lock)을 분산시킨 모델
    11. 그림 10.88 배타 관계 엔터티
    12. 구분자 속성 필요 이유..
    13. 그림 10.89 배타 관계 엔터티를 통합해 서브타입이 도출된 모텔
    14. 그림 10.90 배타 관계 속성을 개별적으로 관리하는 모델
    15. 그림 10.92 고객과 계좌별로 관리되는 알림 서비스
    16. 그림 10.94 배타 관계를 개별 속성으로 관리하는 모델
    17. 그림 10.95 배타 관계를 하나의 속성으로 관리 하는 모델
    18. 그림 10.96 필수 속성을 주 식별자로 베타 관계를 관리하는 모텔
    19. 그림 10.97 배타 속성을 일반 속성으로 사용해서 배타 관계를 관리하는 모델
    20. 그림 10.98 배타 속성이 복잡한 엔터티
    21. 그림 10.99 필수 속성을 기준으로 배타 관계를 관리하는 모델
    22. 순환 관계 그림 10.103
    23. 그림 10.104 계층 구조를 통합해 관계가 단순해진 모델
    24. 그림 10.107 순환 구조의 모델과 릴레이션
    25. 그림 10.108 코드 체계를 계층 구조로 관리하는 모델과 릴레이션
    26. 그림 10.109 다른 인스턴스를 지정해 관리하는 순환 관계
    27. 그림 10.110 일대일 순환 관계
    28. 그림 10.111 일대다 순환 관계
    29. 그림 10.112 다대다 순환 관계
    30. 그림 10.113 여러 역할을 관리하는 다대다 관계
    31. 추출 관계 == 중복 관계 ( 반정규화 ? )
    32. 그림 10.117 상속 단계를 줄이기 위한 추출 관계
    33. 그림 10.121 역할이 다른 양 방향 관계
    34. 그림 10.122 추출 관계로 인한 양 방향 관계
    35. 그림 10.123 일대일 관계가 포함된 양 방향 관계
    36. 그림 10.124 추출 관계로 인한 원환 관게
  2. 10.6 참조 무결성( Referential Integrity )
    1. 관계 검증


1:1 관계

  • 성능적 : IO
  • 관리적
  • 업무적 : 그림 10.79 일대일 관계


그림 10.79 일대일 관계

  • 현재 상태의 여권 데이터을 관리함
그림 10.79


그림 10.80 일대다 관계

  • 여권의 과거 데이터를 관리하면 1:M
그림 10.80


그림 10.81 바람직하지 않은 실체 엔터티의 주 식별자

  • 주 식별자 : 해당 엔터티의 인스턴스를 유일하게 식별할 수 있는 최소한의 구성
그림 10.81


그림 10.82 일대일 관계를 합체한 엔터티

  • 업무적으로 도출된 엔터티 간의 일대일 관계는 최종 단계까지 통합하지 않고 그대로 표현하는 것이 바람직하다.
그림 10.82


그림 10.83 속성 하나가 엔터티로 도출된 모델

  • 여권번호만 엔터티로 관리가 불필요. 하나로 통합
그림 10.83


그림 10.84 일대일 관계가 발생하는 서브타입 모델

그림 10.84


그림 10.85 널 속성을 별도의 엔터티로 분리한 모델

  • 자주 조회 되지않은 속성이 핵심적인 엔터티에 포함되면 버퍼에 자주 쓰이게 되므로 성능을 저하시키는 요인이된다.
그림 10.85


그림 10.86 자주 사용되지 않는 속성을 별도의 엔터티로 분리한 모델

  • 배치( 월배치, 년배치 )
  • 특정 계좌의 대량 기간
그림 10.86


그림 10.87 엔터티를 분리해 락(lock)을 분산시킨 모델

  • 엔터티를 분리해 트랜잭션이 상호 영향이 없도록 할 수 있다.
그림 10.87


그림 10.88 배타 관계 엔터티

  • 구분자 속성으로 관리
  • 장점 : 새로운 베타관계가 추가 되더라도 거래내역 엔터티 구조 변경 없음
  • 단점 : 배타관계 추가시 엔터티 발생, 참조 무결성 제약 조건 설정 못함
그림 10.88


구분자 속성 필요 이유..


SELECT A.거래번호, A.종목구분코드
 FROM 거래내역 A, 주식종목 B, 채권종목 C
WHERE B.주식종목코드(+) = DECODE( A.종목구분코드,1, A.종목번호 )  -- 종목구분코드( 1:주식,2:채권 )
 AND  C.채권종목코드(+) = DECODE( A.종목구분코드,2, A.종목번호 )


그림 10.89 배타 관계 엔터티를 통합해 서브타입이 도출된 모텔

  • 바람직한 모델
그림 10.89


그림 10.90 배타 관계 속성을 개별적으로 관리하는 모델

  • 단점 : 배타관계 추가시 컬럼 추가, 많은 널값 발생, 인덱스 늘어남
그림 10.90


그림 10.92 고객과 계좌별로 관리되는 알림 서비스

그림 10.92


그림 10.94 배타 관계를 개별 속성으로 관리하는 모델

  • 고객과 계좌는 성격이 전혀 다르므로 통합 대상 아님
  • 고객번호 : 10자리, 계좌번호 12자리
  • 널값을 사용 할 수 없으므로 셋팅된 값을 설정
그림 10.94


그림 10.95 배타 관계를 하나의 속성으로 관리 하는 모델

  • 단점 : 고개번호 10, 계좌번호 12, 주 식별자의 값이 가변의 의미를 지니고 있는 것이 단점
그림 10.95


그림 10.96 필수 속성을 주 식별자로 베타 관계를 관리하는 모텔

  • 계좌번호 속성이 null 이면 고개별 알림 서비스를 의미하고, 계좌번호에 값이 존재하면 계좌별 알림 서비스를 의미한다.
그림 10.96


그림 10.97 배타 속성을 일반 속성으로 사용해서 배타 관계를 관리하는 모델

  • 인조식별자로 관리
  • 단점 : 인조식별자가 업무적으로 사용되지 않을 수 있다
그림 10.97


그림 10.98 배타 속성이 복잡한 엔터티

  • 고객번호, 종합계좌번호, 지점코드의 데이터 성격과 길이가 유사하다면 그림 10.97의 고객계좌번호 속성과 같이 배타 속성으로 관리할 수 도 있다.
그림 10.98


그림 10.99 필수 속성을 기준으로 배타 관계를 관리하는 모델

  • 변경일시( 또는 변경순번)를 사용해서 데이터를 생성하는 것도 또 다른 방법이다.
그림 10.99


순환 관계 그림 10.103

  • 본사는 상위 부서가 존재하지 않으므로 업무적으로 상위부서코드 속성은 널값이 돼야 한다.
그림 10.103


그림 10.104 계층 구조를 통합해 관계가 단순해진 모델

  • 바람직한 모델
그림 10.104


그림 10.107 순환 구조의 모델과 릴레이션

  • 인덱스를 사용할수 없어 성능에 문제가 되며 '00'등의 무의미한 값을 사용할 수도 있다.
그림 10.107


그림 10.108 코드 체계를 계층 구조로 관리하는 모델과 릴레이션

  • 분류계층이 고정적이라면 사용할 수 있는 모델
그림 10.108


그림 10.109 다른 인스턴스를 지정해 관리하는 순환 관계

  • 원래 주문이 무엇인지를 순환 관계로 표현
그림 10.109


그림 10.110 일대일 순환 관계

  • 1:1일때는 상위 관계 속성에 유니크 인덱스를 생성해야 한다. 1:1이지만 같은 값이 입력되어 1:M 관계가 될 수 있다.


그림 10.111 일대다 순환 관계


그림 10.112 다대다 순환 관계

  • 하나의 엔터티에서 실현될 수 없으므로 교차 엔터티을 사용해 관계를 해소해야한다.


그림 10.113 여러 역할을 관리하는 다대다 관계


추출 관계 == 중복 관계 ( 반정규화 ? )

  • 관계에도 중복을 의미하는 추출 관계가 있다.
  • 추출 속성은 기존에 존재하는 속성 값에서 생성시킬 수 있는 속성이다.
  • 저장해 관리하며 오히려 데이터 정합성이 훼손될 가능성이 존재해 성능 문제가 없는 한 채택하지 않는 것이 바람직

그림 10.117 상속 단계를 줄이기 위한 추출 관계

  • 왼쪽 모델처럼 대분류.중분류.소분류를 관리하는 엔터티가 있을때
  • 소분류 엔터티에서 특정 소분류코드의 대분류코드가 무엇인지를 알려면 중분류.대분류 엔터티를 조인 해야 한다.


그림 10.121 역할이 다른 양 방향 관계

  • 대표적 양반향 관계


그림 10.122 추출 관계로 인한 양 방향 관계


그림 10.123 일대일 관계가 포함된 양 방향 관계


그림 10.124 추출 관계로 인한 원환 관게

  • 계좌 엔터티의 고객번호 관계 속성과 계좌약정 엔터티의 계좌번호 관계 속성은 정상적인 일대다 관계이다.


10.6 참조 무결성( Referential Integrity )

관계 검증

  • 관계선으로 표현된 관계가 업무에서 관리하려고 하는 관계인가?
  • 1촌 관계만을 관계선으로 표현했는가?
  • 참조무결성제약으로 존재하는 관계선만을 표현했는가?
  • 관계선의 카디널리티가 정확하게 표현되었는가? 1:1, 1:M
  • 관계선의 옵셔널러티가 정확히 표현되었는가? 선택 , 필수
  • 생략된 관계선은 없는가?
  • 배타 관계가 반복적으로 발생하는가?
  • 엔터티 간에 관게가 다수 발생할 때 룰 이름을 적절하게 사용했는가?
  • 양 방향 관계나 원한 관계가 제대로 표현되었는가?
"구루비 데이터베이스 스터디모임" 에서 2014년에 "관계형 데이터 모델링 프리미엄 가이드" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3641

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입