我一直在研究大学项目的ER图。这是关于运输公司。该公司为其他公司和每项工作执行特定工作,需要三种类型的文档,并且这些文档在同类文档中具有唯一标识符。所以我所做的是将这些类型的文档作为单独的实体。现在,当我想将它们(称为Doc1,Doc2,Doc3)加入一个实体(称为Job)时,它们基本上只针对那一个工作而不是其他工作。此外,这个作业只有这些文档中的一个,因此看起来文档和作业之间的关系是一对一的。然而,当教授教我们ER模型时,他告诉我们应该总是避免画一对一的关系(应该有办法让这些文件成为工作的一种属性)。所以我想知道的是 - 将这些文档的标识符作为作业的属性绘制是正确的,然后将它们作为外键引用文档中的相应字段。表(在关系模型中)?或者是否有其他更优雅的方式以某种方式连接它们以避免这些一对一的关系? 另外,如果我这样做,我想我应该将所有3列代表文件'作业表中的标识符UNIQUE,对吗?所以我避免让两个工作有相同的Doc1? 谢谢!
答案 0 :(得分:1)
要避免一对一的关系,因为它们表明通过关系加入的实体实际上是一个。但是,在这里指定的情况下,关系不是一对一的。相反,它是一个零或一个",也称为"一对一可选"。
一个例子是Home和Lot之间的关系。 Home必须位于Lot上,并且在任何给定的Lot上只能有一个Home,但Lot可以在Home构建之前存在。如果你正在建模这种关系,你会得到一个零到一个或一个"地段和家庭之间的关系。它将显示如下:
在您的情况下,您有三个独立的依赖项,因此它看起来像:
从物理上讲,这些关系可以用两种方式表示:
您可以选择最适合您的方法,具体取决于您的应用程序通常导航的方向。
您可能决定让数据库强制执行唯一性约束(事实上只有一个Home可以在Lot上)。在某些数据库中,null值参与唯一性约束(换句话说,唯一索引只能有一个Null条目)。在这样的数据库中,您将受限于第二种方法。在MySQL中,情况并非如此;唯一性约束忽略空值,因此您可以选择任一种方法。第二种方法更为常见。