非唯一索引上的外键?(甲骨文)

And*_*ner 5 sql oracle database-design constraints data-modeling

我试图在表A上创建约束,以检查表B中是否存在一组记录。我可以使用外键,但是问题是表B中的数据不唯一。

有没有一种方法可以创建这样的约束而不创建触发器?

编辑:我不能更改表B的结构。

APC*_*APC 6

外键是1:N关系。约束的引用端只能有一个父记录。这就是为什么我们只能建立引用唯一键的外键约束的原因。

您似乎想要一个M:N的约束。这不适用于关系模型。也许您需要的是一个交叉表(AB),该表将表A中的许多记录与表B中的许多记录链接在一起?实际上,取决于您的实际需求,可能会有几种不同的建模解决方案。

触发器不起作用,部分是因为它们无法缩放,但主要是因为它们在多用户环境中不起作用。


Dav*_*dge 5

一种技术是使用物化视图(提交时快速刷新)来存储引用列的唯一值,并针对该值约束您的表。

由于读取一致性或锁定问题,尝试使用触发器来强制执行完整性通常注定要失败。