데이터베이스에서 사용자 정의 계층 관계를 모델링하는 가장 좋은 방법은 무엇입니까?
-
05-09-2019 - |
문제
기본적으로 사용자가 계층 적 모델을 정의 할 수 있기를 원하지만 사용자가 정의 된 모델 내에 데이터를 저장할 수 있도록해야합니다. 이게 말이 되요? 따라서 사용자는 계층 적으로 구성 할 새로운 "단위 유형"을 만들고 이러한 유형의 단위를 어떻게 구성 할 수 있는지 결정할 수 있습니다. 간단한 예 : 가상의 인터페이스에서 사용자는 트렁크, 분기 및 잎의 세 가지 단위 유형을 만듭니다. 그런 다음 사용자는 자신의 관계를 정의합니다. 잎은 계층 구조의 어느 시점에서나 존재할 수 있으며, 분기에는 부모로서 트렁크가 있어야합니다. 그런 다음 사용자는 이러한 단위 유형의 인스턴스 (단위) 인스턴스를 생성하고 모델에 정의 된 규칙에 따라 구성 할 수 있습니다 ... 데이터베이스에서이를 수행하는 좋은 방법이 있습니까?
해결책
이것은 매우 광범위한 질문이지만, 이것은 당신이 올바른 방향을 가리킬 수 있습니다. 관계 규칙을 데이터베이스에 저장할 수 있습니다. 그들을 시행하는 것은 고객 코드에 달려 있습니다. 크기에 대해 이것을 시도하십시오 ..
unit:
unit id,
name,
unit relationship:
unit id,
foreign unit id
그런 다음 다음 방법으로 단위 관계 테이블을 사용할 수 있습니다 ..
unit id
설명하는 장치와 관련이 있습니다.foreign unit id
무효가되어야합니다.
ㅏ unit
관계 기록은 상속 구조의 근원에만 존재할 수 있습니다. ㅏ unit
a null
foreign unit id
다른 사람을 가질 수 있습니다 unit
부모로서. 그렇지 않으면, a unit
다른 것이 있어야합니다 unit
부모로서 유형은 관계 기록에 정의 된 것 중 하나 여야합니다.
인스턴스 자체를 저장하는 것은 간단해야합니다 ..
instance:
instance id,
unit id,
parent instance_id
나는 당신이 필요로하는 다른 필드가있을 것이라고 확신하지만 (예를 들어, 이름), 나는 당신이 드리프트를 얻는다고 가정합니다.
다른 팁
세 가지 개념을 구현해야합니다.
- "단위 유형"및 허용 연관성
- 계층
- 실제 단위
이러한 개념은 모델에서 다소 독립적으로 공존 할 수 있지만 함께 작동합니다.
create table unittype
(
id int;
name varchar(20);
)
create table unitrelationship
(
id int;
parent_id int;
)
계층 구조를 자체 참조 테이블로 모델링 할 수 있습니다.
create table hierarchy
(
id int;
parent_id int;
unit_type_id int;
unit_id int;
)
그런 다음 하나 이상의 테이블에 장치 인스턴스를두고 설명한 작업을 수행 할 수 있습니다.
create table unit
{
id int;
....
}
좋은 소식은 허용 된 부모 유형 만 제한하고 있으며, 예를 들어 허용 유형의 기존 기존 단위 목록에서 부모를 선택하여 사용자 인터페이스에서 쉽게 시행 할 수 있다는 것입니다.
여러 계층 구조 (한 세트의 어린이, 다중 계층 적 견해)를 지원해야하지만 비슷한 문제를 해결하고 있습니다. Joe Celko의 "Sml for Smarties의 나무와 계층 구조"(ISBN : 1558609202)가 유용하다는 것을 알았습니다. 나는 여전히 문제를 해결하고 있지만이 주제에 대해 논의 할 때 자주 나타나서 언급하기에 적절 해 보였습니다.