【问题标题】:How to model data entities with multiple parents?如何对具有多个父级的数据实体进行建模?
【发布时间】:2012-10-19 13:25:00
【问题描述】:

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

表上的自然键是:

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

是的,两个实体可以在两种或多种不同类型的关系中相互关联。

感谢您的帮助。

【问题讨论】:

    标签: data-structures parent-child datarelation


    【解决方案1】:

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

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

    EntityID 和 ParentID 都是 Entities.ID 的 fks。并从实体中删除 ParentID。 以及对EntityRelationships中关系的一点修改

    除了将 fk 指向实体之外,您还需要将 fk 指向 EntityParentRelation.ID 以获得 LEntityID 和 REntittyID。

    希望它会有所帮助:)。

    【讨论】:

    • 您提供的解决方案很有趣,但似乎只是多对多的关系。也就是说,它似乎不是基于暗示父子关系的 sql 语义。或者您是否建议此连接表仅由包含本机键的表中的 id 组成,该键由一对多排列的自引用列组成?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2013-10-05
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2019-06-08
    • 2013-10-17
    相关资源
    最近更新 更多