2011-04-08 56 views
6

我想拥有一个包含两列的SQL表。一个是进入另一个表的关键字,另一个保存字符串文字。这个想法是可以准确地输入电话号码(在这种情况下使用电话簿表中的ID)或作为通配符(使用字符串文字)。MySQL:约束一组列,所以至少有一个不是NULL

这意味着表中的一列将保存一个值,另一列将保留一个NULL。

是否有可能约束一个表的方式,一列必须有一个值,而另一个必须是NULL?如果两列均为NULL或两者均有值,则该行无效。

我有一种感觉,MySQL无法做到这一点(因为它似乎没有一个全面的工具箱,当谈到约束),但它不会伤害问。

+0

这可能有帮助(虽然不*完全相同):http://stackoverflow.com/questions/4523351/mysql-constraint-two-所以他们之一总是零空间 – WhyNotHugo 2012-08-14 05:41:09

回答

4

我不知道强制执行此限制的方法。

作为一种解决方法,您可能会考虑使用两个不同的列:如果数据包含一列(包含电话簿标识或字符串字面值),另一列为数据类型 - “精确”或“通配符' - ,你可以为这两列设置NOT NULL约束。一个显而易见的缺点是您不能再对电话簿表进行FK约束。

+0

我会接受这一点,但我去的实际设计有所不同。相反,我添加了一个可以是精确或通配符的Kind字段,并且Key字段的内容将根据类型字段的值指向电话簿或新的通配符表。类型和密钥是一个复合唯一密钥,因此密钥可以包含两次相同的值(一次是电话簿的密钥,一次是通配符的密钥)。 – GordonM 2011-04-08 12:25:34

相关问题