可选外键,其中之一必须是强制的 - 如何?

发布于 2024-12-08 18:17:27 字数 196 浏览 0 评论 0原文

我有一个表,有两个可选的外键,每个外键对应一个不同的表,并且其中一个必须填写,但哪一个并不重要。我正在考虑使用触发器来强制执行此“约束”,但这样做感觉不对。我无法重新设计表格,所以我只能坚持下去。

我们正在使用Oracle 10g

有没有更好的方法来做到这一点?

编辑:我不小心遗漏了一些信息。至少必须填写一栏,并且只能填写一栏。

I have a table that has two optional foreign keys, each to a different table and one of which HAS to be filled in, but it doesn't matter which one. I was thinking about using a trigger to enforce this "constraint", but it feels wrong doing it that way. I am not able to redesign the tables, so I am stuck with it.

We are using Oracle 10g

Is there a better way to do this?

EDIT: I accidentally left out some of the info. At least one column HAS to be filled in, and ONLY one column CAN be filled in.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

疾风者 2024-12-15 18:17:27

使用检查约束。如果它们都可以填充,那么:

 alter table t add constraint c check (col1 is not null or col2 is not null)

或者如果它们是互斥的:

 alter table t add constraint c check ((col1 is not null and col2 is null
                                       or (col2 is not null and col1 is null))

Use a check constraint. If they can both be populated then:

 alter table t add constraint c check (col1 is not null or col2 is not null)

Or if they are mutually exclusive:

 alter table t add constraint c check ((col1 is not null and col2 is null
                                       or (col2 is not null and col1 is null))
薄荷港 2024-12-15 18:17:27

创建另一个表作为您当前引用的两个表的父表。仅使用一个外键(不可为空)而不是两个外键引用该新表。换句话说,使用超类型/子类型模式。

Create another table to be parent of the two tables you are referencing at the moment. Reference that new table with just one foreign key (non-nullable) instead of two. In other words use a supertype / subtype pattern.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文