관계형 데이터베이스 핵심원리는 데이터를 중복하지 않고 한 군데에서만 관리( Normalization)하고, 필요할 때 연결(join)해서 보는 것이다. 데이터가 필요할 때 조인하면 되기 때문에 릴레이션을 분해할 수 있을때까지 분해한다. 릴레이션 분해 후 연결해서 사용하기 위해 관계가 필요한 것이다.
관계 주요 단어 : 관계 속성과 참조 무결성
※ 참조무결성제약 : 하위에 존재하는 데이터는 상위에 존재해야 한다. 이를 물리적으로 구현한 것
관계는 물리적으로 관계 속성과 참조 무결성 제약 이 두가지를 생성한다.
관계 속성은 엔터티에 생성되고, 참조무결성제약은 DB에 생성된다.
관계에서 참조무결성은 조인과 연관된다. 관계의 다른표현 참조무결성은 RDB핵심이다.
RDB에서의 관계는 논리적인 연관성이 있어야 하고, 바로 상위 관계여야한다.
논리적인 연관성은 참조무결성이고 상위 관계는 1차관계이다.
관계와 혼동하는 것이 업무흐름이다. 업무흐름과 관계는 같지 않다. 관계로 표현되는 업무 흐름이 일부있을 뿐이다. 업무흐름을 관계로 표현하는 것은 데이터와 업무 활동을 혼동하기 때문이다. 업무활동을 엔터티로 설계하면 업무 흐름은 관계로 설계될 가능성이 높다.
업무활동에 의해서 데이터가 생길뿐 업무활동과 데이터는 별개다.물론 업무흐름과 관계가 일치하는 경우가 있다. 상태의 변화나 순차적인 업무에 의해서 데이터 생기고 그 데이터간의 연관관계를 관리해야 한다면 업무흐름을 관계로 설계해야 한다. 이런경우는 많지 않기 때문에 업무 흐름을 관계로 설계할 때 주의해야 한다.
선으로 표현된 관계의 실상은 속성이다. 관계는 속성의 일부일 뿐이다. 속성으로 표현된다는 것은 실체가 존재한다는 의미다. 조인하려면 양쪽 속성이 존재해야 한다.
관계와 속성, 참조무결성과 조인은 서로 연관되어 있다. 관계를 개념적으로 생각하지 않고 실제 존재하는 것으로 인식하는 것이 중요하다. 관계선의 실상은 속성이라는 사실과 관계선은 참조무결성 제약으로 생성해서 실체화 하는 것이란 사실!!
관계선이 의미하는 것
- 업무규칙 : 관계선의 가장 중요한의미 관계선을 보고 업무규칙을 알 수 있다. 업무규칙은 기본적으로 종속관계이나 참조관계냐로 구분할 수 있다. 종속관계라면 한몸과 같은 관계이고, 참조관계는 없으면 허전한 관계이다. 관계선은 일차적으로 두 엔터티가 얼마나 밀접하게 연관됐는지 보여준다. 한업무를 하는데 필요한 데이터가 무엇인지를 보여준다.
- 업무프로세스 : 업무프로세스에 의해 발생하는 데이터면 관계선이 업무의 흐름을 의미하기도 한다.일반적으로 업무의 흐름과 관계선의 표현은 일치한다.(업무프로세스가 모두 관계선으로 표현되는 것은 아니다.)
-조인 : 관계선은 당연히 데이터를 조회할 때 조인하는 경로를 의미한다. 상위엔터티의 주 식별자와 하위 엔터티의 관계속성을 연결해 주는 것이 관계선이다. 관계선으로 연결된 상위 엔터티와 조인해야 원하는 결과를 가져올 수 있다. 관계가 존재하는 하위 엔터티의 속성에 저장된 값은 상위엔터티의 주식별자에 존재해야 한다. 값으로 연결되지 않는 다면 관계선을 표현하지 않아야 한다.
입력순서 : 관계선은 데이터를 입력할 때 입력순서를 의미하기도 한다. 반드시 그렇지는 않지만, 일반적으로 데이터는 상위엔터티부터 생성되고 하위 엔터티에 생성된다. 만약 그렇지 않다면 데이터 성격에 따르기보다는 인위적인 예외일수 있다.
다양한 의미가 있는 관계선을 표현안해도 된다는 의견이 있는데, 어차피 DBMS에 참조무결성 제약을 생성하지 않을 것이기 때문에 복잡하게만 보인다는 주요이유다. 또한 일일이 파악하는 것도 힘들고 관리하기도 쉽지 않다.
코드속성 및 시스템속성을 제외하고는 관계를 표현하는게 원칙이다. 모델을 복잡하게 만드는 현상은 다른 방법으로 해결해야 한다. 하나의 영역에 포함되는 엔터티를 50개이내로 줄이고 엔터티를 복제해서 관계를 표현하거나 엔터티 배치를 잘하면 가독성이 좋아진다. 가독성을 핑계로 업무를 표현하는 관계선을 생략하는 것은 주객이 전도된 것이다.
관계선은 필수사항이다. 업무규칙을 의미하는 관계선이 표현된 것과 생략된 것은 맣은 차이가 있어 실제로 존재하는 관계선은 모두 표현하는 것이 원칙이다.
관계를 설계할때 고려사항
· 속성으로 관리하려는 관계
· 참조무결성 관계
· 바로상위의 1차관계
· 속성으로 관리하려는 관계
관계선을 표현할 때 최우선으로 고려해야 할 것이 관리하고자 하는 것이 관계인지 따져야 한다.
보통 관계선의 필요여부를 업무담당자가 판단하지만, 업무관점에서 필요한 관계인지 모델러가 분석해서 판단해야 한다. 모델러가 업무를 만드는 사람은 아니지만 업무를 효율적으로 하도록 제안하는 사람은 될 수 있다. 틀리거나 무의미한 업무에 대해서 모델러가 검증해야 한다.
관리 할 필요가 있는지 확인할 때 추출관계는 제외해야 한다. 추출관계는 기본적으로 관리할 필요가 없다. 성능문제가 있을때에 한해서만 선택적으로 관리하는 것이 원칙이므로 관계가 필요여부를 따질때는 제외해야 한다.
관계선을 표현하면 속성이 따라가게 된다. 그속성이 반드시 필요한 속성인지 없어도 무관한 속성인지 분석해야 한다. 관계선으로 표현된 속성이 없어도 업무를 하는데 지장이 없다면 그 관계선과 관계속성은 삭제하는 게 맞다.
· 참조무결성 관계
참조 무결성은 외래식별자 속성의 값은 상위 엔터티의 주 식별자 값과 일치하거나 널값이어야 한다는 것이다. 참조무결성 관계가 아니라면 관계선을 표현하지 않아야 한다.
· 바로상위의 1차관계
관계는 1차관계여야 한다. 바로 상위 엔터티하나와의 관계만을 관계선으로 표현해야 한다. 관계분석시 제대로 못하는 것이 1차관계인 바로 위의 부모를 찾는 것이다. 바로 위만 정확해지면 나머지 모두 정확해진다.때에 따라서 성능 문제를 해결하기 위해서 바로위의 관계이외에도 더 상위엔터티와 관계를 관리할 필요도 있다. 추출관계라고 한다.
ad관계와 bd관계는 추출관계다. D엔터티의 a속성, b속성은 추출속성이다. D엔터티입장에서 바로 위의 상위엔터티가 C엔터티이므로 'cd관계'가 중요하다. 'cd관계'만 알면 업무를 수행하는데 문제가 없다. ad관계와 bd관계는 1차관계가 아니다. D엔터티와 같이 모든 상위 엔터티와의 관계를 표현하면 모델의 가독성을 떨어트리게 된다.
통합종목 엔터티는 모든 종목을 통합관리하는 엔터티이다. ETF종목에도 포함되지만, 주식에 직접 포함되는 종목이다. 이런업무규칙를 정확히 반영한 것이 #1차관계를 설계한 모델 이다. 통합종목엔터티와 ETF종목 엔터티는 직접적인 관계가 없으며 간접관계가 존재한다. #1차관계를 위반한 모델은 통합종목 엔터티와 ETF종목 엔터티는 관계가 아예엾는건 아니지만 1차관계는 아니며 직접관계인 주식종목엔터티와 ETF종목엔터티의 관계가 생략됐으므로 잘못된 모델이다.
1차관계는 참조무결성 관계보다 찾기 힘들수 있다. 일반적으로 조인해서 사용한다면 참조무결성관계다. 중복, 추출 관계도 참조 무결성 관계지만 1차 관계는 아니다. 값으로 판단하기에도 참조무결성 관계를 판단하는 것보다 1차관계를 판단하는 것이 범위가 더욱 좁다. 관계를 설계할 때는 그 관계가 꼭 필요한 관계인지 참조무결관계가 성립하는지 바로 상위 엔터티와의 1차관계인지를 확인해야 한다.
'관계형데이터모데링노트 요약' 카테고리의 다른 글
식별 관계와 비식별 관계 (0) | 2023.12.30 |
---|---|
참조 무결성 (0) | 2023.12.15 |
속성 식별자 검증 (0) | 2023.12.05 |
널(Null)에 대하여 (1) | 2023.12.03 |
데이터 타입 선정 원칙과 절차 (0) | 2023.12.03 |