我有一个包含组件的表,其他的工作订单和其他与RepairTask的表。任务与组件的关系是1:N,一个任务只有一个组件。并且任务与工单有1:N的关系,因为任务只能在一个工单中。组件和工单之间的关系是N:N,因为一个工单可以影响许多组件。
我想知道:
修复组件的工作订单 组件已收到的任务。 我在工单中完成的任务。
为此,我认为有两个选项,三个表之间的循环关系或三个表之间的三元关系。
选项1:周期关系
Components(IDComponent, ...)
WorkOrders(IDWorkOrder, IDComponent, ...)
Tasks(IDTask, IDComponent, IDWorkOrder, ...)
ComponetsHasWorkOrders(IDComponent, IDWorkOrder)
选项2:三元关系
Components(IDComponent, ...)
WorkOrders(IDWorkOrder, ...)
Tasks(IDTask, ...)
CompoentsHasWorkOrdersAndTasks(IDComponent, IDWorkOrder, IDTask)
在第二个选项中,我设置IDTask必须是唯一的,因为任务只在一个工单和一个组件中。因此,通过这种方式,我确保了任务和组件之间的1:N关系以及workOrders和Tasks之间的1:N。
我在这个解决方案中看到的一个问题是,如果我删除一个工作单,例如,我删除了CompoentsHasWorkOrdersAndTasks中的记录,所以我失去了组件和任务之间的关系。我会改变关系,并在作为主键一部分的字段中允许null,所以这不是一个好主意,所以我需要一个虚拟工作订单来处理这种情况。
但我不知道三元关系或周期关系是否更好。
还有其他解决方案吗?
感谢。
答案 0 :(得分:2)
注意:OrderTaskNo
表中的Task
是一个整数;对于每个OrderID
,都有OrderTaskNo {1,2,3, ...}