mysql - ER图——避免一对一关系

标签 mysql sql database relational-database entity-relationship

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

最佳答案

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

一个例子是“Home”和“Lot”之间的关系。住宅必须位于一 block 地 block 上,并且任何给定地 block 上只能有一个住宅,但该地 block 可以在住宅建成之前存在。如果您正在对这种关系进行建模,那么 Lot 和 Home 之间将具有“一对零或一对一”的关系。它将显示如下:

enter image description here

在您的情况下,您有三个独立的依赖项,因此它看起来像:

enter image description here

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

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

您可以根据应用程序通常导航的方向,选择最舒适、最高效的方法。

您可能决定让数据库强制执行唯一性约束(即一 block 土地上只能有一个住宅)。在某些数据库中,空值参与唯一性约束(换句话说,唯一索引只能有一个空条目)。在这样的数据库中,您将仅限于第二种方法。在 MySQL 中,情况并非如此;唯一性约束会忽略空值,因此您可以选择任一方法。第二种方法更为常见。

关于mysql - ER图——避免一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35063357/

相关文章:

mysql查询,=和IN之间性能不同

sql - LIKE '[A-D]%' 有什么区别?和介于 'A' 和 'D' 之间;在 SQL Server 中

sql - 在sql server中使用不同的过滤器选择数据

java - DriverManagerDataSource 连接是如何创建的?

mysql - Mysql中的两列在column1和column2之间具有唯一性约束

php - 在 MySQL 中为 datetime 添加秒数

php - 数据缓存会造成干扰吗?

SQL连接,从一张表中获取数据

python - SQLAlchemy order_by 公式结果

php - 使用 PHP 更新 mysql 数据