관계형데이터모데링노트 요약

참조 무결성

mitomi 2023. 12. 15. 22:05
반응형
SMALL

참조무결성이 존재할때만 관계선을 표현해야 한다.

참조한다는 것은

-관계선으로 연결된것을 의미

-하위엔터티의 외래식별자 속성에 존재하는 값이 상위 엔터티의 주식별자 값과 일치하거나 널이라는 의미

-참조 무결성 제약이 존재하면 하위엔터티에 데이터를 인서트 할때 상위 엔터티에 값이 존재하지 않으면 입력할 수 없다.

-상위 엔터티의 주식별자값을 삭제할때는  하위 엔터티에 사용된값을 먼저 모두 삭제해야 상위 값을 삭제할 수 있다.

 

참조무결성은 논리적인 개념이다. 이를 모델에 표현한 것이 관계선이며, DBMS에 물리적으로 구현한 것이 참조 무결성 제약이다. 참조무결성 제약은 논리적인 관계선을 물리적으로 연결한 것으로 DBMS 데이터 딕셔너리에 데이터로서 존재한다.

 

관계를 논할때  실제로 존재하지 않은 관계는 삭제해도 무방하다. 관계도 물리적으로 접근해야 한다. 관계선은 관리되지 않는 논리적인 선처럼 보이지만, 그 바탕에는 실제 존재하는 실체의 관계속성 외래키 제약이 존재한다.

물리적으로 FK 제약을 생성하지 않는 것과 참조무결성 관계가 없는 것은 본질적으로 다른 애기다.

데이터 관점에서 참조무결성이 존재하면 FK제약이 없더라도 참조 무결성 관계다.

성능과 개발의 불현함 같은 이유로 FK제약을 생성하지 않을 뿐 참조 무결성 관계는 존재하는 것이다.

 

 

관계선을 표현할때는 참조무결성 관계를 기준으로 해야 명확하다.

두 엔터티 공통속성인 식별자로 조인할 수 있는 경우에만 관계선을 표현해야 한다.

특수관계인 Between 관계등은 관계선을 표현하지 않아야 한다.

가독성은 정확하게 표현해야 한다. 많은 정보를 준다고 가독성이 좋아지지않는다.

 

참조무결성은 인터뷰를 통해 파악된 참조 무결성 관계를 기반으로 주요데이터를 분석하면서 관계를 확인하는 것이 바람직하다. 전체데이터가 공개되면 참조무결성관계를 다시 확인한다

 

데이터 무결성 제약이나 FK제약은 데이터 무결성을 위한   DBMS 물리적인 장치이다.

데이터 무결성은 관계형 데이터 모델링을 수행 할 때 이루어야 할 가장 최상 목표이므로, 모델의 관계선은 참조 무결성 제약을 구현하는 것이 원칙이다. 참조무결성으로 구현해야 하지만, 구현하지 않더라도 관계선을 표현해야 한다.

 

기준 엔터터의 참조 무결성

엔터티 간에 참조 무결성 관계가 존재하는지를 분석 할때 가장 헷갈리는 엔터티 종류가 기준 엔터티이다.

기준 엔터티 : 업무에서 참조하는 일자, 금액, 율 등의 데이터를 관리하는 엔터티가 포함 ex)  환율, 우편번호, 이자율

기준 엔터티 사용하면서 주의할 점 : 이자율 등의 기준 엔터티와 이자율을 사용하는 엔터티와와 관계

두 엔터티간에 관계선을 표현할지는 실제 참조 무결성 제약이 존재하는 지로 따져야 함

 

기존 엔터티의 데이터가 변경되면 

- 그 기준 데이터를 참조해 사용했던 데이터를 전부 바꿀 것인지 

-선택할 당시의 시점 데이터로 그대로 둘지

기준 데이터는 조회해서 참조하는 것이므로 참조 무결성 관계가 존재하지 않는 것이 일반적이지만, 이 판단은 업무 요건에 따라 달라진다.

편주소 엔터티는  전국 주소를 우편번호로 관리하는 기준 엔터티이다.

고객 엔터티에서 우편주소 엔터티의 데이터를 보고 고객이 선택한 시점의 주소를 관리.

고객은 우편주소  엔터티에 있는 기준 데이터를 사용해서 자신의 주소를 선택한다. 고객의 주소를 관리하는 엔터티는 고객 엔터티이다.

고객 엔터티에는 우편주소 엔터티의  주식별자(우편번호, 우편번호순번)가 없기 때문에 두 엔터티 간에는 관계가 존재하지 않는다. 우편주소 엔터티의 데이터를 참조해서 고객의 주소 데이터를 입력할 뿐 실제 참조 무결성 제약은 없다는 것을 의미한다.

 

고객의 주소 데이터는  기준 데이터를 보고 선택한 시점의 주소이므로, 기준 데이터인 우편주소 엔터티의 데이터가 바뀔 때, 고객의  조소 데이터도 같이 바뀌면 안 된다는 것을 의미한다. 두 데이터 간에 참조 무결성 관계가 존재하지 않으면 상위 엔터티의 값이 바꿔도 하위 엔터티의 값에는 영향을 미치지 않는다.

위의 모델은 고객 엔터티에 주소를 입력할 때는 참조 무결성이 성립되도록 우편주소 엔터티에 존재하는 주 식별자 값을 입력한다.

우편주소 엔터티와 조인하면  상세정보까지 알수 있기때문에 우편주소 속성이 존재하지 않는다.

고객 엔터티에서 시점 데이터로서 주소를 별도로 관리하지 않고, 우편주소 엔터티에서 관리되고 있는 기준 데이터를 따르게 된다.

우편주소 엔터티에서 우편번호에 해당하는  시도군 데이터 수정하게 되면 고객이 선택했던 주소도  같이 변경되게 된다. 이력데이터를 관리하는 것과 연관되어 업무를 어떻게 정의하는지에 따라 달라진다.

 

 

기준 데이터를 사용할 때는

- 기준 데이터를 관리하는 기준데이터

- 기준 데이터를 사용하는 엔터티와의 관계를 심도 있게 분석해야 함

 

 기준 데이터가 바뀌면

- 그 기준데이터를 참조해 사용했던 데이터를 전부 바꿀것인지

- 그 기준 데이터를 참조해 사용했던 데이터는 선택 할 당시의 데이터이므로 영향이 없는지 확인 필요

 

일반적으로 기준 데이터와 참조 무결성 관계가 존재하지 않는데 화면에서 데이터 입력 시 텍스트 박스에서 직접 수기로 입력해서 저장한다면 참조 무결성이 성립하지 않는 것이다. 환율이나 수수료율은 해당 기준을 조회해서 참고한 후에  실제 적용할 율을 직접 입력하게 된다.

위 모델은 계좌 엔터티에 수수료율 속성이 존재할 뿐 참조한 기준 엔터티의 주 식별자(계좌유형코드, 거래채널코드,변경일자)와 동일한 관계 속성은 존재하지 않으므로 수수료율 엔터티와 계좌 엔터티는 참조 무결성 관계가 존재하지 않는다.

수수료율 엔터티의 수수료율 속성 값이 계속 변경되는 상태에서 계좌 엔터티와 참조 무결성 관계가 존재하면  계좌 엔터티의 수수료율 속성 값도 계속변경된다.  기준엔터티는 참조한 엔터티와 참조 무결성 관계가 성립하지 않는다.

 

실제로 참조 무결성 관계가 있는지 참조 무결성 관계로 관리하는 것이 실익이 있는지 대한  확인해야한다. 업무가 연관되거나 속성명이 같다고 관계선으로 표현하지 않도록 주의!!

 

기준 엔터티와의 관계를 설계할 때는 기준 엔터티의 값이 참조 엔터티에 값으로 존재해야 하는지, 아니면 관계로 존재하는지 분석해야 한다.

입력돤 값으로 존재한다면 참조 무결성 관계는 없는것이다. 기준 데이터는 값으로 저장하여 관리하는 것이 일반적이다.

 

참조 무결성 관계가 존재한다면

-기준 엔터티의 존재하는 값이 바뀌면 참조 엔터티에 사용한 값도 바꿔야 한다는 것을 의미한다.

-참조한 값이 참조할 시점의 값을 의미한다면 값을 임의로 바꾸면 안되고, 이력데이터에서 찾으면 가능하겠지만 실익이 없다.

 

 

종속 관계와  참조 관계

관계는 두개 이상의  엔터티간에 존재하는 연관성이며, 종속 관계와 참조 관계가 있다.

- 종속관계 : 부모 엔터티와 자식 엔터티간의 관계로 부모 엔터티가 없으면 자식 엔터티가 존재할 수 없다. 자식 엔터티는 부모 엔터티의 존재 종속이므로 혼자 존재할 수 없다.

- 참조관계 : 어떤 엔터티와의 연관성을 관리하려는 관계일 뿐 상위 엔터티가 없다고 존재할 수 없는 관계는 아니다. 단순히 참조 데이터를 관리하므로 관계를 삭제하더라도 한 속성의 연관성을 모르게 될 뿐 하위 자식 엔터티가 존재할 수 없는 것은 아니다.  관계가 엔터티의 존재 자체와 연관된 것이 아니라 속성 하나만 연관된다.

 

종속 관계

- 데이터 본질적으로 종속 관계인 것 : 상품-상품가격 예외가 없이 완전종속

- 업무적으로 종속 관계인 것 : 특정팀은 리그에 반드시 속해야 한다는 요건이 있기 때문에 종속관계로 도출되었고,  종속관계를 강제하기 위해 관계를 식별자로서 상속

업무적 종속 관계는 요건이 언제든 바뀔수 있기 때문에 전략적으로 만들 필요가 있다. 팀엔터티는 실체 엔터티이므로 팀번호가 주식별자 되는게 명확해 보이고 실체엔터티의 주식별자 속성이 두개이상인것 또한 바람직하지 않다. 이와 같은 이유로 단독속성으로 주식별자를 정하면,  리그번호는 일반속성이된다. 아래 모델과 같이 비식별 관계로 관계선을 상속하면 팀이 리그에 종속되어 있다는 요건이  관계선에 의해 관리되지 않고 업무규칙에 따라 관리된다. 즉 요건이 깨질 수도 있다는 의미! 종속관계를 확장성를 고려하여 아래와 같이 관리할 수도 있다.

존재 종속이라는 데이터 본래 성격과 주식별자의 효율성 업무의 변경가능성 등을 고려해야 한다.

 

팀 엔터티의 관계 속성인 리그번호 속성값이 널을 허용함으로 팀은 리그가 없어도 별도로 존재할 수 있으므로 단순 참조관계다

팀 엔터티의에서 관계를 삭제하더라도 팀엔터티는 존재할 수 있다. 리그번호를 속성을 관리하지 못 할 뿐이지 팀 존재 자체가 문제가 되는 것은 아니다. 참조관계에서 하위 엔터티의 주식별자는 인조식별자이거나, 엔터티 자체의 업무 식별자다. 리그 엔터티의 주식별자가 팀엔터터의 주식별자에 관여해서는 안된다.

 

엔터티 간에 종속관계가 존재하면 부모 엔터티의 주식별자를 자식 엔터티의 식별자로 상속하는게 일반적(완전 종속)

관계를 느슨하게 관리하기 위해 부모엔터터의 주식별자를 자식엔터티에 일반속성으로 상속할 수도 있음.

 

참조관계는 하위 엔터티의 식별자로 상속하지 않아야 하고, 존재종속이 없음에도  주식별자를 상속하면 확장성이 매우 떨어진다.

 

 

 

728x90

'관계형데이터모데링노트 요약' 카테고리의 다른 글

관계비  (0) 2024.01.24
식별 관계와 비식별 관계  (0) 2023.12.30
관계 이야기  (0) 2023.12.09
속성 식별자 검증  (0) 2023.12.05
널(Null)에 대하여  (1) 2023.12.03