我在确定涉及可能与 super 实体或父实体有关系或没有关系的实体的正确数据库设计时遇到困难。
我有相应实体的表work_orders
、work_order_groups
和contracts
。
最初,它是从与契约(Contract)具有一对一
关系的工作订单开始的。但引入了子工单的概念,用于不同类型的额外工作。它们仍然是工作订单,但从主工作订单分支出来,因此添加了 parent_work_order_id
来将该关系表示为引用另一个工作订单的 id
的外键。因此,工作订单可以有 0-to-1
父工作订单。
这些子工作订单与父工作订单共享相同的契约(Contract),因此契约(Contract)与工作订单的关系更改为 1-to-M
。
希望此时数据库设计听起来可以接受。现在这就是我有一些疑问的地方。我们引入了打包交易,其中可以将多个工作订单组合在一起。我们需要存在一个工作订单组实体,以便我们可以记录有关该组的详细信息。工作订单与工作订单组之间存在0对1
关系。
契约(Contract)将根据工作订单组的详细信息创建,因此我认为契约(Contract)应与工作订单组关联。这将在工作订单组和契约(Contract)之间建立1对1
关系。与子工单类似,组内的所有工单都将共享相同的契约(Contract)。这样就可以级联到所有子项目:您将有一个带有契约(Contract)的工作订单组,所有工作订单共享该契约(Contract),然后所有子工作订单也共享。我不确定这个设计。在我的脑海里,我有这样的想法:
这可以接受吗?我觉得我将把 contracts_id
存储在多个地方,尽管这确实是这种关系的运作方式。
最佳答案
0-to-1 -- 让实体表中的 id(“0”)为有效 id 或 NULL(或者可能为 0)对于“1”。
1:many -- 在单个表中('tree'/'parent-child'/'hierarchy') -- 子记录具有一个父记录的 ID。最终祖先(如果有的话)的parent
将为NULL
或0
。无子级父级是可能的,但通过查看父行并不明显。
1:many -- 在两个表中,做类似的事情。
关于mysql - 数据库设计 - 来自 super /父实体的共享关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35424336/