mysql - 数据库设计 - 来自 super /父实体的共享关联

标签 mysql database database-design entity relational-database

我在确定涉及可能与 super 实体或父实体有关系或没有关系的实体的正确数据库设计时遇到困难。

我有相应实体的表work_orderswork_order_groupscontracts

最初,它是从与契约(Contract)具有一对一关系的工作订单开始的。但引入了子工单的概念,用于不同类型的额外工作。它们仍然是工作订单,但从主工作订单分支出来,因此添加了 parent_work_order_id 来将该关系表示为引用另一个工作订单的 id 的外键。因此,工作订单可以有 0-to-1 父工作订单。

这些子工作订单与父工作订单共享相同的契约(Contract),因此契约(Contract)与工作订单的关系更改为 1-to-M

diagram 1

希望此时数据库设计听起来可以接受。现在这就是我有一些疑问的地方。我们引入了打包交易,其中可以将多个工作订单组合在一起。我们需要存在一个工作订单组实体,以便我们可以记录有关该组的详细信息。工作订单与工作订单组之间存在0对1关系。

契约(Contract)将根据工作订单组的详细信息创建,因此我认为契约(Contract)应与工作订单组关联。这将在工作订单组和契约(Contract)之间建立1对1关系。与子工单类似,组内的所有工单都将共享相同的契约(Contract)。这样就可以级联到所有子项目:您将有一个带有契约(Contract)的工作订单组,所有工作订单共享该契约(Contract),然后所有子工作订单也共享。我不确定这个设计。在我的脑海里,我有这样的想法:

diagram 2

这可以接受吗?我觉得我将把 contracts_id 存储在多个地方,尽管这确实是这种关系的运作方式。

最佳答案

0-to-1 -- 让实体表中的 id(“0”)为有效 id 或 NULL(或者可能为 0)对于“1”。

1:many -- 在单个表中('tree'/'parent-child'/'hierarchy') -- 子记录具有一个父记录的 ID。最终祖先(如果有的话)的parent将为NULL0。无子级父级是可能的,但通过查看父行并不明显。

1:many -- 在两个表中,做类似的事情。

关于mysql - 数据库设计 - 来自 super /父实体的共享关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35424336/

相关文章:

mysql - SQL 中的 Group By 和having 出现问题

mysql - else 语句在 mysql 中不起作用

MySQL 多个 if block ,插入语句失败

mysql - AJAX、PHP 和 MySQL 会成为在线扑克游戏的良好套接字吗?

c# - Entity Framework 6.0 代码优先迁移 - 模型/数据库兼容性错误?

php - *特别是*,是什么让 DataMapper 比 ActiveRecord 更灵活?

sql - 相关表中值的部分索引,而不是外键?

mysql - SQL Zoo 中的最后一个查询,SELECT 教程

c# - Entity Framework 为导航属性添加新记录

php - 小巴预订系统的架构建议