2011-04-08 80 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

相關問題