1

我的表架构是:

 r(int aID not null, int bID not null, bool main)

主键(aId、bID)。aID 和 bID 都是外键(指不同的表)。

我想强制执行对于每个 aID,始终只有一个且唯一的 bID 也是 main=true。

我怎样才能在数据库级别做到这一点?我可以通过添加 a 来强制执行“max 1” constraint unique (aID, main),并且 main 是 true 或 NULL。

“至少1”部分怎么样?

PS:在 MySQL 上工作。

编辑:用于澄清的示例数据:您可以拥有 aID 和 bID 的各种组合,但对于每个 aID,只有一个组合也应具有 main=true。演示数据:

 1, 2, true
 1, 3, NULL
 1, 4, NULL
 1, 5, true <- wrong, only one main=true
 ...
4

1 回答 1

0

您应该创建两个触发器。它们都适用于每一行。第一个将在插入之前适用,第二个将在更新之前适用。如果 main=true 并且表中至少有另一行具有与 new.aID 相同的 aID 但具有不同的 bID,并且 main = true,则设置 new.main = false。

在大多数 RDBMS 中,您可以在单个触发器中执行此操作,但 MySQL 不支持(如果我没记错的话)适用于插入和更新的触发器。

于 2012-03-20T12:46:40.957 回答