三元关系与周期关系,这是更好的选择?

时间:2014-02-12 12:25:02

标签: database database-design entity-relationship

我有一个包含组件的表,其他的工作订单和其他与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,所以这不是一个好主意,所以我需要一个虚拟工作订单来处理这种情况。

但我不知道三元关系或周期关系是否更好。

还有其他解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:2)

注意:OrderTaskNo表中的Task是一个整数;对于每个OrderID,都有OrderTaskNo {1,2,3, ...}

enter image description here