【问题标题】:ternary relationship vs cycle relationship, which is better option?三元关系与循环关系,哪个更好?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多