database - 无法更改现有表时如何强制执行一对多关系

标签 database oracle database-design

关闭。这个问题需要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/

相关文章:

ruby - CouchDB 的嵌入式模拟,与 SQL Server 的 sqlite 相同

java - java中的同步

php - 如何根据查询中字段的相对位置对表中的列进行排序?

database - 存储和解析文本日志和报告的理想系统

mysql - 检测到无效的时间戳文字

oracle - 通过过滤多行选择查询

sql - 如何根据列的累积和创建不相等的十分位数/四分位数

sql - oracle sql 如何获取不匹配的正记录

ruby-on-rails - Notifications ala Facebook(数据库实现)

sql-server - 记录数据库表、函数、存储过程、 View 等的使用情况