是否可以对输入的记录设置约束/触发器,以检查用户是否至少输入了三个字段之一(所有字段都可以为空)。例如,我有一个数据库用于跟踪其他软件中的错误和新功能。当发现错误时,会创建一个功能记录,该记录可以具有三个外键:discoveredID、fixedID 或 newFeatureID,这三个外键都可以为空(因为它可能是发现的错误、已修复的错误或添加到软件中的新功能。)用户在输入数据时必须至少选择一项。我可以使用我的数据库控制外部程序中的输入,但如果其他人编写了一个程序,他们可能不会进行该检查,所以我想阻止他们这样做并输入损坏的数据。
使用 SQL Server,添加表级检查约束 http://msdn.microsoft.com/en-us/library/ms188258.aspx就足够了。
CREATE TABLE Bugs (
discoveredID INTEGER
, fixedID INTEGER
, newFeatureID INTEGER
)
ALTER TABLE Bugs ADD CONSTRAINT CKC_AtLeastOne CHECK (COALESCE(discoveredID, fixedID, newFeatureID) IS NOT NULL)
INSERT INTO Bugs VALUES (NULL, NULL, 1)
INSERT INTO Bugs VALUES (NULL, 1, NULL)
INSERT INTO Bugs VALUES (1, NULL, NULL)
INSERT INTO Bugs VALUES (NULL, NULL, NULL) -- Fails
DROP TABLE Bugs
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)