Data structures 如何为具有多个父对象的数据实体建模?

Data structures 如何为具有多个父对象的数据实体建模?,data-structures,parent-child,datarelation,Data Structures,Parent Child,Datarelation,如果一个实体可以是两个独立的、不相关的层次结构的一部分,并且每个实体可以以非层次结构的方式与一个或多个其他实体相关,我将如何建模多个实体之间的关系?我只希望在数据库中的2或3个表中执行此操作 我目前将其建模为两个表: Entities ---------------------------------------------------------------- ID bigint identity(1, 1) PK Pare

如果一个实体可以是两个独立的、不相关的层次结构的一部分,并且每个实体可以以非层次结构的方式与一个或多个其他实体相关,我将如何建模多个实体之间的关系?我只希望在数据库中的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是Entities.ID列的FK,ParentID是ID列的FK。只要一个实体不能有多个父实体,这个模型可能会很好地工作。我需要能够允许一个实体有多个父实体

表上的自然键为:

Entities: ParentID, Name
EntityRelationships: LEntityID, REntityID, EntityRelationshipTypeID
是的,两个实体可以在两种或多种不同类型的关系中相互关联


谢谢您的帮助。

是的,您可以这样做。您需要引入另一个表调用EntityParentRelation,如下所示

EntityParentRelation
--------------------------------------------------------------------------------
ID                           bigint                  identity(1,1)   pk   
EntityID                     bigint                  not null        fk
ParentID                     bigint                  not null        fk
其中EntityID和ParentID都是对Entities.ID的fks。并从实体中删除ParentID。 对实体关系中的关系做了一些修改

在将fk指向实体之前,您需要将fk指向EntityId和RentityId的EntityParentRelation.ID


希望有帮助:)。

您提供的解决方案很有趣,但似乎只是一种多对多关系。也就是说,它似乎不基于暗示父子关系的sql语义。或者,您是否建议此联接表仅由包含本机键的表中的id组成,本机键由一对多排列中的自引用列组成?