【问题标题】:(Database) Can 2 weak entities form an associative entity?(数据库)2个弱实体可以形成一个关联实体吗?
【发布时间】:2015-03-07 10:40:47
【问题描述】:

目前我有一种情况,即 2 个弱实体形成一个关联实体(由于多对多关系)。

“项目”强实体

组成
projectID (PK), projectName, projectStartDate, projectEndDate

“任务”弱实体由一个

组成
composite primary key projectID (FK,PK) and taskID (PK), taskName,etc

“资源”弱实体由一个

组成
composite primary key projectID (FK,PK) and resourceID (PK), resourceName, maxUnits, standardRate, costPerUse, etc

(资源实体就像人力/设备/机器。但是,每个项目的每个资源都是不同的,因此我觉得它不能是一个独立的实体,但它必须是一个与“项目”实体相关联的弱实体。)

但是,1 个资源在一个项目中可以有很多任务,而 1 个任务可以有很多资源。因此,它形成了多对多的关系。 (在 Resource 和 Task 弱实体之间)

因此,它有一个称为“分配”实体的关联实体。

如果我要绘制“分配”表,它将具有以下属性:

projectID, taskID, resourceID, workCompleted, work, units

之后我很困惑,当我为“分配”表创建 SQL 结构时,我是从 Task Weak Entity 还是从 Resource Weak Entity 引用 projectID?

还是我映射的所有内容都不正确?

【问题讨论】:

    标签: entities associative weak


    【解决方案1】:

    嗯 - 这实际上很难完整回答,因为它很大程度上取决于您的实际数据和数据模型等。

    根据您提到的,我认为您需要一个与项目无关的资源表,因为如果它是人员/人力 - 一名工作人员应该能够与多个项目相关联(我认为)使其成为“员工”和“项目”之间的多对多关联。

    首先 - 我认为您需要这样的表结构:

    Staff/Resource --> ResourceOnProject     <-- Project
    Id (PK)        --> ProjectID, ResourceId <-- Id (PK)
    

    而不是您现有的资源表。

    如果这是可能的,我认为它应该会帮助你。 根据任务中的信息,您也许可以这样做。

    但是现在,您应该可以将您的分配更改为仅保留来自 Staff/Resource 的 ResourceId,而无需您在当前设置中面临的“双重”ProjectId 问题。

    所以基本上:

    Staff/Resource (Id PK)
    Project (Id PK)
    ResourceOnProject (ProjectId FK, ResourceId FK)
    Task (Id PK, ProjectId FK) 
    Assignment (TaskId FK, ProjectId FK, ResourceId FK)
    

    【讨论】:

    • 您好,感谢您的回复。基本上在 Resource 表中,有 maxUnits、standardRate、costPerUse 等属性。 (资源可能包括设备也不仅仅是人力)。但是,例如 Jack 对其他项目有其他承诺,因此他对该特定项目的 maxUnits(如承诺水平)是 50% 而不是 100%。这就是我需要将资源链接到项目的原因,因为每个资源对每个项目的承诺级别各不相同。
    • 这些信息仍然可以放在关联表(ResourcesOnProject)上。根据您在此处的信息,您将需要一个基本的人员/资源表 - 因为“杰克有其他承诺”。这意味着您的“分配”表不涉及“员工”和“项目”之间的关联,而只是“员工”,因此它消除了您对分配的“双”项目 ID 的问题
    • 那么这是否意味着Resource Table对Project来说不应该是一个弱实体,而它本身应该是一个强实体?
    • 您需要一个包含“Jack”和其他员工/资源的基表。我在回答中称其为“员工/资源”。然后,您可以将该表与包含该关联所需信息的项目相关联。那就是你称之为“资源”的那个,我称之为“ResourceOnProject”。然后,您的分配表将引用“员工/资源”而不是“ResourceOnProject”,以及您的任务,并且您不再遇到分配中“双重”ProjectID 引用的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2021-12-30
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多