数据库设计 - 从超级/父级实体共享关联

时间:2016-02-16 05:17:52

标签: mysql database database-design entity relational-database

我无法确定涉及与超级实体或母公司有关系或可能没有关系的实体的正确数据库设计。

我有相应实体的表work_orderswork_order_groupscontracts

最初,它开始时的工单与合同有1-to-1的关系。但是,引入了童工订单的概念,用于不同类型的额外工作。它们仍然是工作订单,但是从主工作订单分支,因此添加了parent_work_order_id来表示该关系作为引用另一个工单的id的外键。因此,工单可能有0-to-1个父工单。

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

diagram 1

希望在这一点上,数据库设计听起来可以接受。现在,这是我有些疑虑的地方。我们引入了一揽子交易,其中可以有多个工作订单组合在一起。我们需要一个工单组实体存在,以便我们可以记录该组的详细信息。工单与工单组有0-to-1的关系。

合同将根据工单组的详细信息创建,因此我认为合同应与工单组相关联。这将在工作单组和合同之间建立1-to-1关系。与子工单相似,组内的所有工单都将共享相同的合同。因此,可以级联到所有子项目:您有一个合同的工作单组,所有工作订单共享该合同,然后是所有子工作订单。我不确定这个设计。在我的脑海里,我有这样的事情:

diagram 2

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

1 个答案:

答案 0 :(得分:0)

0到1 - 让id('0')成为有效的id或NULL(或者0)坐在Entity表中的'1'。

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

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