【发布时间】:2014-02-14 20:47:11
【问题描述】:
我有一个包含组件、其他工作订单和其他带有 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,所以这不是一个好主意,所以我需要一个虚拟工单来处理这种情况。
但是不知道是三元关系好还是循环关系好。
还有其他解决办法吗?
谢谢。
【问题讨论】:
-
是不是直接加入第一个模型就可以得到答案?
标签: database database-design entity-relationship