关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
5年前关闭。
Improve this question
作为背景,我的情况是我有一个缺少很多外键关系的数据库。特别是一个,我们称之为订单 ,它表示具有 OrderID 和 LocationID 复合主键的订单。我们将调用的另一个表 订单详情 它有一个 OrderID 但没有 LocationID。实际上,不可能同时在两个位置下订单,因此假设明细表中不需要 LocationID。我没有设计它,我无法改变它。
我们还必须假设由于各种原因不支持将位置 ID 添加到详细信息表中。我们还与 Oracle 和一个在许多地方有许多并发用户的大容量数据库合作。最后,更改使用此表的任何应用程序的时间最短。
所以我的问题是:这个解决方案是否可行,或者还有什么我应该尝试的吗?
假设我创建了一个交集表,因为缺少更好的名称 全部订单 或任何带有主键 订单号 .现在我们链接订购 .OrderID 至 全部订单 .OrderID 和链接订单详情 .OrderID 至 全部订单 .OrderID。那么填写是否合理?全部订单 通过每个插入到 的触发器订单 强制执行完整性?我假设所有应用程序都在订单之后插入详细信息,否则强制执行的更改将是最小的并且是允许的。
有没有更好的解决方案?我知道如果负责设计或给予更多修复余地,我们会以不同的方式做这件事,但我正试图在限制条件下发挥最大作用。
编辑 -
为了阐明我想要完成的任务,我想将具有相同 ID 的所有订单视为等效类模位置,并确保如果删除任何订单,则需要删除具有相同 ID 的所有订单并删除所有子订单详细信息.最重要的是没有孤立的细节。如果可能的话,这必须以最小的应用程序更改来完成,并且如果可能的话,不要重新设计现有的表。
最佳答案
创建一个新表来处理 future 的映射。
表:tb_order_orderdetails
列:OrderID、LocationID、OrderDetailsID
关于database - 无法更改现有表时如何强制执行一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902368/