维护引用完整性
给定架构:
MACHINE_TYPE { machine_type } MACHINE { machine, machine_type } SORT_PLAN { sort_plan, machine_type } SCHEDULE { day_of_week, machine, sort_plan }
和业务规则:
排序计划可以分配给任何 相同 machine_type 的机器。
如何强制在 SCHEDULE 中,machine 和 sort_plan 引用的元组具有相同的 machine_type?
如有必要,可以更改架构。
Given the schema:
MACHINE_TYPE { machine_type } MACHINE { machine, machine_type } SORT_PLAN { sort_plan, machine_type } SCHEDULE { day_of_week, machine, sort_plan }
and the business rule:
A sort plan can be assigned to any
machine of the same machine_type.
How do I enforce that, in SCHEDULE, the tuples referenced by machine and sort_plan have the same machine_type?
The schema can be changed, if necessary.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会在 SCHEDULE 表上使用插入触发器。
I'd use an insert trigger on the SCHEDULE table.
您可以更改计划表,使其不具有 MachineType,并添加一个名为 machinePlan 的新表,该表对于可以使用该计划的每台计算机都有一行,并包含 MachineId 和 PlanId。 然后从这个新表的父计算机表而不是从计划表本身派生计划的 MachineType。
最后,更改计划表,以便它的 FK 返回到这个新的 MachinePlan 表,而不是您当前拥有的表。
这还有一个额外的好处,因为您不会不可撤销地键入计划所适用的机器类型的规则。 您将单独保留此关联,并且可以在必要时决定使用同一组规则(同一计划,对于多种机器类型的机器......
You could change the plan table so it does not have MachineType, and add a new table called machinePlan, that has a row for every machine that can use that plan, with the MachineId and the PlanId. Then derive MachineType for a plan from this new table's parent machine table instead of from the plan table itself.
Last, change the schedule table so that it's FK is back to this new MachinePlan table, instead of as you currently have it
This also has added benefit in that you are NOT irevocably typing the rules for a plan on which machine type they apply to. You are keeping this association separately, and can, if necessary, decide to use the same set of rules (the same plan, for machines of more than one machine type...