Как моделировать объекты данных с несколькими родителями? - PullRequest
3 голосов
/ 26 августа 2010

Как бы я смоделировал отношения между несколькими объектами, когда один объект мог бы быть частью двух отдельных, не связанных между собой иерархий, и каждый объект мог бы быть связан с 1 или несколькими другими объектами неиерархическим образом? Я хотел бы сделать это только в 2 или 3 таблицах в базе данных.

В настоящее время он смоделирован на две таблицы:

Entities
----------------------------------------------------------------
ID                          bigint        identity(1, 1)    PK
ParentID                    bigint        null              FK
Name                        varchar(100)  not null
Description                 varchar(256)  null

EntityRelationships
----------------------------------------------------------------
LEntityID                   bigint    not null    PK, FK
REntityID                   bigint    not null    PK, FK
EntityRelationshipTypeID    int       not null    PK, FK

Два столбца, LEntityID и REntityID, являются FK для столбца Entities.ID, а ParentID является FK для столбца ID. Эта модель, вероятно, будет работать нормально, если у объекта никогда не может быть более одного родителя. Мне нужно иметь возможность разрешить сущности иметь более одного родителя.

Натуральные ключи на столах:

Entities: ParentID, Name
EntityRelationships: LEntityID, REntityID, EntityRelationshipTypeID

Да, две сущности могут быть связаны друг с другом в двух или более разных типах отношений.

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 19 октября 2012

Да, вы можете сделать это.Вам необходимо ввести еще один вызов таблицы EntityParentRelation, который структурирован ниже

EntityParentRelation
--------------------------------------------------------------------------------
ID                           bigint                  identity(1,1)   pk   
EntityID                     bigint                  not null        fk
ParentID                     bigint                  not null        fk

, где EntityID и ParentID являются fks для Entities.ID.И удалите ParentID из сущностей.И небольшая модификация отношений в EntityRelationships

Чтобы указывать fk на сущности, вам нужно указать fk на EntityParentRelation.ID для LEntityID и REntittyID.

Надеюсь, это поможет:).

...