【问题标题】:relationships between 3 entities in ER diagram--is a ternary enough or are 2 binaries also needed?ER图中3个实体之间的关系——一个三元足够还是还需要2个二进制?
【发布时间】:2017-08-07 16:12:40
【问题描述】:

我正在尝试为我的项目管理软件绘制 ER 图 描述如下。它包含以下实体:

  • 项目 - 软件项目
  • 任务 - 可以分解为多个任务的软件项目
  • 员工 - 属于此软件的员工

还有:

  1. 可以将项目划分为任务。 (任务可以由管理员创建,管理员可以将这些任务分配给选定的项目。这里只有任务分配给项目,没有员工分配给项目。)

  2. 可以将员工分配给项目。
    (可以将员工分配到项目。这里只有员工分配到项目,没有分配到项目的任务。)

  3. 对于选定项目的选定任务,我们可以从池中分配员工——在 2 中分配给该项目的员工。 (这次我们必须指定项目、任务和员工;所有 3 个选项都是强制性的。)

上述1、2、3的输入过程可以在系统的不同页面中完成。 您可以先选择其中任何一个。

对于上述关系,我创建了这个 ERD:

考虑

  • 项目和任务之间的关系 1
  • 项目与员工的关系 2

是否需要 ER 图中的两个独立关系, 关系 1 和关系 2?

我们能否只使用项目、员工和任务之间的关系 3,也就是关系 3?

【问题讨论】:

  • @SachithrraDias & Susantha7 编辑后/赏金:如果我的回答没有回答你的问题,请评论说明原因。有什么不明白的吗?正如我在上一次对我的回答的评论中所说,如果您想知道您的设计是否“正确”,那么这不是问题要问的问题,您需要澄清它(不使(合理的)答案无效)或问一个新问题。在一个没有明确要求你想要什么的问题上加分并不能帮助你得到你想要的答案。 PS我编辑了我的答案以澄清。
  • Susantha7 (& @SachithrraDias) 请解释如何在您的图表中解释实体类型的基数。有两种风格。在一种风格中,实体类型的基数是参与实体可以在行中出现多少次。在另一种风格中,实体类型的基数是其他实体的组合可以与参与实体实例一起出现的次数。无论如何,ER 图只提供设计所需的一些信息。当一行进入关系时,你真的应该给出条件(谓词),并给出包含约束的 DDL。
  • 我对你的回答不太了解......这就是为什么我问我的图表是正确的......你能解释一下你的答案吗? >
  • 然后在我的答案中使用 cmets 要求它在您不明白的地方更清楚。你不明白的第一件事是什么?你了解关系代数还是 SQL? PS 最近 translate.google.com 做了一些量子 AI 改进,一定要试试。

标签: database database-design relational-database database-schema entity-relationship


【解决方案1】:

TL;DR 您需要所有三种关系类型/表。因为如果你丢掉一个,那么在某些情况下你会丢失数据——没有办法用剩下的来回答所有相同的问题。

不同的约束可能意味着我们可以删除一个关系/表,因为它可以用其他人来表达。 规范化到更高的 NF(正常形式)告诉我们什么时候可以用更小/更简单的关系/表格替换关系/表格。


每个关系表都包含参与关系的行。我们可以通过谓词(语句模板)来描述这种关系:

1 Divides_to 包含 (T, P) 行,其中 project P divides to task T
2 Has 包含 (E, P) 行其中 employee E is assigned to project P
3 持有(E, T, P) 行其中employee E is assigned to task T on project P

我们可以放弃 1 吗?如果我们忽略 3 中的员工,那么我们会得到 some employee is assigned to task T on project P 所在的行。但是(根据上述)那不是 1 中的行。也许项目 p1 在 1 中划分为任务 t1,但没有员工被分配给项目 p1 上的任务 t1;那么1中的行(t1,p1)不是3中的子行。并且2中没有任务信息。所以我们不能用3和2来代替1。

我们可以放弃 2 吗?类似地:如果我们忽略 3 中的任务,那么我们会得到 employee E is assigned to some task on project P 所在的行。但是(根据上述)这不是 2 中的行。也许员工 e1 被分配到项目 p1 但没有分配到项目 p1 上的任务;那么2中的行(e1,p1)不是3中的子行。并且1中没有员工信息。所以我们不能用3和1来代替2。

我们可以放弃 3 吗?使用 1 和 2 我们可以得到 employee E is assigned to project P AND project P divides to task T 所在的行。但是(根据上述)这不是 3 中的行。如果分配给项目的员工没有分配给它的所有任务,或者如果项目的任务没有分配给它的所有员工,它们会有所不同。没有其他方法可以从 1 和 2 生成 3。所以我们不能使用 1 和 2 来代替 3。

所以我们需要所有三种关系。

当约束成立时,某些查询表达式总是返回与其他某些否则不会返回的结果相同的结果。因此,在不同的约束条件下,我们可能能够删除关系/表,因为我们可以通过其他人的查询/视图来表达其内容。我们可能会选择不同的关系/表。

对更高 NF 的规范化指导将关系分解为更简单的其他关系,从而可以根据某些约束来表达它。


PS 1 这也是我们需要实体类型/表而不仅仅是关系类型/表的原因。 (如果我们不希望它们用于实体特定属性或只是 ER 建模约定。)例如,这三个关系无法告诉您未分配到项目或任务和项目的员工。对于任务和项目也是如此。

PS 2 我们忽略了关系代数中的一个属性,而不是projecting。我们通过不selecting 来忽略 SQL 中的列。结果的谓词是属性/列的某些值,旧谓词成立。关系natural join 给出关系/谓词是输入关系/谓词的 AND 的行。在 SQL 中,没有重复的行和没有共享的可空列 select distinct from natural join

PS 3 根据常识,您的设计满足某些约束:如果任务-项目对出现在 3 中,那么它必须出现在 1 中,如果员工-项目对出现在 3 中,那么它必须出现在 2 中。一种反映方式在 ER 建模中,将任务-项目和员工-项目关系具体化为关联实体,然后将 3 替换为 ER 所称的那些实体上的二元关系。关系上,关系/表在值上仍然是三元的,其中某些子行恰好标识了这些实体。获得约束关系二进制 3 的一种方法是在 2 中添加员工项目 PK(主键)或 CK(候选键)id,并用这样的 id 替换 3 中的复合 FK(外键)。然后我们有一个关于实体和值的二进制文件。一些伪 ER 方法可以做到这一点。

PS 4 这种(真正的 Chen)ER 图通常不使用 SQL 空值。但是碰巧你可以用一个带有空值的 3 的变体来替换所有三个关系。您将null-扩展二元关系并union 将它们与三元关系。像往常一样,空值使谓词复杂化。通常我们添加一个可为空的列作为添加一个单独的表的替代方法,该表共享一个无空的 CK(候选键)。但这是不同的,没有节省空间或连接;它只会使事情复杂化。 (包括重要的约束。)

    E IS NULL
AND task T is of project P
AND NOT EXISTS E [employee E is assigned to task T of project P]
OR  T IS NULL
AND employee E is assigned to project P
AND NOT EXISTS T [employee E is assigned to task T of project P]
OR  employee E is assigned to task T of project P

(在 SQL 中也存在问题,因为 SQL uniqueprimary keyjoin 不是这些名称的关系事物,因为它们特别对待 null。)

PS 5 我的一些答案是关于三元与二元关系(船)类型/表/谓词:
Should this ER diagram use a ternary relationship instead
Best Solution - Ternary or Binary Relationship
Why can't you just join in fan trap?
并重新设计&谓词:
Modeling multiple many to many relationships between the same entities in a relational database
What is the difference between an entity relationship model and a relational model?
Is there any rule of thumb to construct SQL query from a human-readable description?

PS 6 Has 是一个无用的通用关系名称/含义/表。使用有意义的名称,例如 Is_assigned_toAssignment

【讨论】:

  • 你的意思是上面的ER图是正确的......对于这种情况
  • 1. “是”或“否”会提供信息吗? 2. 这与您的帖子中的问题不同,请提出一个新问题。但它可能太宽泛了。因为: 3. 工程中很少有“正确”,存在权衡。此外,在您知道并准确说出 you 的意思之前,请勿使用该词。 4. 否则,您实际上只是在要求一本关于信息建模和数据库设计的书。读一些。 5. 你的表格反映了你的描述。没有一张桌子可以告诉你另一张桌子做了什么。这是合理的。我的回答探讨了几种设计。试一些。能够描述每一种情况。
猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2018-09-02
相关资源
最近更新 更多