繁体   English   中英

ER图-避免一对一关系

[英]ER diagram - avoiding one-to-one relationship

我一直在为大学项目设计ER图。 关于运输公司。 该公司为其他公司做特定的工作,并且每项工作都需要三种类型的文档,并且这些文档在同类的其他文档中具有唯一的标识符。 因此,我所做的就是将这些类型的文档作为单独的实体。 现在,当我想将它们(称为Doc1,Doc2,Doc3)加入一个实体(称为Job)时,它们基本上仅是为该一项工作而没有的。 另外,此作业只有这些文档中的每一个,因此看起来文档与作业之间的关系是一对一的。 但是,当教授教我们ER模型时,他告诉我们应该避免绘制一对一的关系(应该有一种方法使这些文档具有工作的属性)。 所以我想知道的是-将这些文档的标识符绘制为job属性,然后使其成为引用文档表(在关系模型中)的相应字段的外键是否正确? 还是有其他更优雅的方式以某种方式将它们连接起来,从而避免了一对一的关系? 另外,如果我这样做,我想我应该在Job表中使代表文档标识符的所有3列都变为UNIQUE,对吗? 这样我就避免进行两个具有相同Doc1的作业? 谢谢!

应避免一对一的关系,因为它们表示该关系所连接的实体实际上是一个实体。 但是,在此处指定的情况下,关系不是一对一的。 相反,它是“一对零或一个”,也称为“一对一可选”。

一个例子是房屋与地块之间的关系。 房屋必须位于一个地块上,并且任何给定地块上只能放置一个房屋,但是该地块在建造房屋之前可以存在。 如果要对此关系建模,则Lot与Home之间将具有“一对零或一个”关系。 它将显示如下:

在此处输入图片说明

在您的情况下,您具有三个独立的依赖项,因此如下所示:

在此处输入图片说明

从物理上讲,这些关系可以两种方式表示:

  1. “一个”行中的可为空的外键(在上面的示例中为“ Lot”),或者
  2. “零或一个”行中的非空外键(在上面的示例中为Home)

您可以根据应用程序通常的浏览方向来选择最舒适,最有效的方法。

您可能决定让数据库强制执行唯一性约束(事实上,一个地块上只能有一个房屋)。 在某些数据库中,空值会参与唯一性约束(换句话说,唯一索引只能有一个Null条目)。 在这样的数据库中,您将不得不使用第二种方法。 在MySQL中,情况并非如此。 唯一性约束会忽略空值,因此您可以选择其中一种方法。 第二种方法更常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM