假设一个名为Mytable的表,其中有两列C1和C2。 我想要这两列互斥。Oracle专栏互斥
我的意思是,如果我在这个表中的这一行的一列C1中输入值,db不应该允许C2中的条目,反之亦然。
在任何情况下,其中一列应该被允许有数据,而不是两者(两者都是NULL值除外)。
是否可以通过创建此表的触发器?
假设一个名为Mytable的表,其中有两列C1和C2。 我想要这两列互斥。Oracle专栏互斥
我的意思是,如果我在这个表中的这一行的一列C1中输入值,db不应该允许C2中的条目,反之亦然。
在任何情况下,其中一列应该被允许有数据,而不是两者(两者都是NULL值除外)。
是否可以通过创建此表的触发器?
我的意思是,如果我进入这行此表中的一列C1值,分贝不应该让在C2,反之亦然条目。 在任何情况下,其中一列应该被允许有数据,而不是两者(两者都是NULL值除外)。
这样的事情可能吗?
ALTER TABLE mytable
ADD CONSTRAINT constraint_name CHECK ((c1 is null and c2 is null) or
(c1 is not null and c2 is null) or
(c1 is null and c2 is not null))
使用Karnaugh map或简单的逻辑,你可以重写为:
ALTER TABLE mytable
ADD CONSTRAINT constraint_name CHECK (not (c1 is not null and c2 is not null))
这是事实显性化,唯一的无效组合是“同时具有C1和C2的值” 。
ALTER TABLE mytable
ADD CONSTRAINT constraint_name CHECK (c1 is null or c2 is null)
这样,它将允许我在两列中插入数据。我想只有其中一列的数据不是两个。就像C1有数据一样,C2决不允许插入/更新数据。如果C2有数据,则绝不允许C1插入/更新数据。如果两者都是NULL,那很好。 – user1583751 2014-12-19 09:39:08
谢谢Sylvain和Juergen,这有助于很多:) – user1583751 2014-12-19 09:52:11