데이터베이스에서 사용자 정의 계층 관계를 모델링하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/728137

문제

기본적으로 사용자가 계층 적 모델을 정의 할 수 있기를 원하지만 사용자가 정의 된 모델 내에 데이터를 저장할 수 있도록해야합니다. 이게 말이 되요? 따라서 사용자는 계층 적으로 구성 할 새로운 "단위 유형"을 만들고 이러한 유형의 단위를 어떻게 구성 할 수 있는지 결정할 수 있습니다. 간단한 예 : 가상의 인터페이스에서 사용자는 트렁크, 분기 및 잎의 세 가지 단위 유형을 만듭니다. 그런 다음 사용자는 자신의 관계를 정의합니다. 잎은 계층 구조의 어느 시점에서나 존재할 수 있으며, 분기에는 부모로서 트렁크가 있어야합니다. 그런 다음 사용자는 이러한 단위 유형의 인스턴스 (단위) 인스턴스를 생성하고 모델에 정의 된 규칙에 따라 구성 할 수 있습니다 ... 데이터베이스에서이를 수행하는 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

이것은 매우 광범위한 질문이지만, 이것은 당신이 올바른 방향을 가리킬 수 있습니다. 관계 규칙을 데이터베이스에 저장할 수 있습니다. 그들을 시행하는 것은 고객 코드에 달려 있습니다. 크기에 대해 이것을 시도하십시오 ..

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)가 유용하다는 것을 알았습니다. 나는 여전히 문제를 해결하고 있지만이 주제에 대해 논의 할 때 자주 나타나서 언급하기에 적절 해 보였습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top