【发布时间】:2013-11-02 17:07:17
【问题描述】:
假设我在一个表中有 3 列 - A、B 和 C。我想确保如果我在 A 列中插入一些值(比如 x),我不能插入一个包含 B 或 C 的元组等于 x,即对于所有元组,值 x 对于列 A 应保持唯一。
请注意,对于其他一些元组,x 可以在 A 中重复。
我知道 SQL 中的 UNIQUE 子句,但这只是为了确保某个值在特定列中只出现一次。由于 Oracle 中的 CHECK 语句不允许子查询,我不知道如何实现它。
编辑(添加更多信息)
主键是 Employee_Number,而有问题的 3 列是 LandlineNo、MobileNo 和 VOIP。因此假设这是一个条目:
Employee_Number = 1, LandlineNo = x, MobileNo = y, VOIP = z
那么另一个元组的这个条目将不被允许 -
Employee_Number = 2, LandlineNo = a, MobileNo = x, VOIP = c
另一方面,这个就可以了(是的,2名员工可以拥有相同数量的相同类型)
Employee_Number = 2, LandlineNo = x, MobileNo = b, VOIP = c
【问题讨论】:
-
你能用好行和坏行的例子来扩展你的问题吗?表的结构和主键是什么?
-
你还在为这个桌子设计而苦恼吗?您要求 ist 保证每个数字都属于某种类型。那么为什么没有一个“数字”表,主键是数字(或者一个 id 加上对数字的唯一约束,如果你愿意的话),然后你就有一个列类型。因此,每个数字都是唯一的并且具有一种类型。然后在您的员工表中,您只有该数字表的三个外键(即三个数字或三个 ID)。
-
您使用的是哪个版本的 Oracle?
-
同意@ThorstenKettner——这绝对是一个有问题的数据模型。
-
这是失败的数据模型。依赖于普通数据库约束的简单、更好的建模将产生简单、更好的结果。听@ThorstenKettner 。
标签: sql oracle tuples multiple-columns unique-constraint