只允许两个表之一引用基表的约束
我有3张桌子。一个基表,称为表 A,以及两个引用表 A 的表,称为表 X 和表 Y。X 和 Y 都有一个引用表 A 的外键约束。X 和 Y 的外键也是它们自己的外键主键。
我想知道是否可以添加一个约束,仅允许这些表之一包含引用表 A 的记录。因此,如果 X 有一条引用 A 的记录,则 Y 不能有一条记录,如果 Y有一条引用 A 的记录,则 X 不能有该记录。
这可能吗?
谢谢,
I have 3 tables. A base table, call it Table A, and two tables that reference Table A, Call them Table X and Table Y. Both X and Y have a foreign key contraint that references Table A. The Foreign Key of X and Y is also their own Primary Key.
I'd like to know if it is possible to add a constraint that will only allow one of these tables to contain a recrod that references Table A. So if X has a record that references A then Y can't have one and if Y has a record that references A then X can't have one.
Is this possible?
Thanks,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
UDF 的 CHECK 约束(这是 Oded 的答案)不能很好地扩展并且并发性很差。请参阅这些:
所以:
这是所有的超键或子类型方法
CHECK constraints with UDFs (which is Oded's answer) don't scale well and have poor concurrency. See these:
So:
This is the superkey or subtype approach
是的,可以使用 CHECK 约束。
除了正常的外键约束之外,您还需要添加 CHECK 约束 在两个引用表上,以确保另一个引用表中未使用外键。
Yes, this is possible using CHECK constraints.
Apart from the normal foreign key constraint, you will need to add a CHECK constraint on both referencing tables to ensure that a foreign key is not used in the other referencing table.