【发布时间】:2021-05-01 22:54:34
【问题描述】:
这听起来很简单,也可能很简单。我有 3 列,一列带有常量字符串(名称),一列(状态)带有两个选项(外键),另一列(room_id)是另一个表的父键,如何确保只设置一行为同名的“ON”值。不能有多个具有相同名称的“ON”值的行,但可以有多个具有相同名称的“OFF”值的行。示例。
room_id name status
1 daniel ON --- OK for only one ON to be set for daniel
2 daniel OFF
3 daniel OFF
4 daniel OFF
5 daniel OFF
6 daniel ON --- THIS IS NOT ALLOWED... but everything is UNIQUE
1 jeff OFF
2 jeff OFF
3 jeff ON --- OK for only ONE to be set to "ON" for jeff.
4 jeff ON --- THIS IS NOT ALLOWED... the room_id keeps things UNIQUE
5 jeff ON --- THIS IS NOT ALLOWED...
下面的 UNIQUE 约束允许多个同名的“ON”值。
ADD CONSTRAINT constratin_name_uq UNIQUE (room_id, name, status)
我相信我也需要一个 CHECK 约束,但在 value = 'ON'... 的状态列上的 COUNT 不大于 1...以确保只有一个“NAME”和“STATUS”具有 ON 值....
下面的约束不允许多个“OFF”值,这在我的情况下是必需的。
ADD CONSTRAINT constraint_name_uq UNIQUE (name, status)
另外...一切都可以“关闭”,但每个给定名称只能有一个“开启”。
感谢您的帮助,
谢谢你, 丹尼尔
【问题讨论】:
-
您可能需要使用前触发器
标签: oracle constraints unique multiple-columns