我正在尝试创建一个关系,其中可能包含四个不同部分中的任何一个,但相同部分的任何集合都应该被视为唯一的。
示例:分配必须有一个指定的公司,可以选择有一个指定的位置、工作组和程序。分配可能没有没有位置的工作组。
假设我们有公司 A、B、C;位置 X、Y、Z;工作组 I、J、K 和程序 1、2、3。
所以有效的关系可能包括 A - X - I - 1 A - Z - 2 B - Y C C - 3 B - Z - K
但无效的关系将包括 A - K(无位置的工作组) Y - K - 1(无公司)
所以,为了创建我的表,我创建了
companyID INT NOT NULL,
FOREIGN KEY companyKEY (companyID) REFERENCES company (companyID),
locationID INT,
FOREIGN KEY locationKEY (locationID) REFERENCES location (locationID),
workgroupID INT,
FOREIGN KEY workgroupKEY (workgroupID) REFERENCES workgroup (workgroupID),
programID INT,
FOREIGN KEY programKEY (programID) REFERENCES program (programID),
UNIQUE KEY companyLocationWorkgroupProgramKEY (companyID, locationID, workgroupID, programID)
我认为这将处理我的所有关系,除了如果有工作组(我认为我可以很高兴地以编程方式或使用触发器来完成)分配位置的必要性之外
但是,当我测试此架构时,它允许我输入以下内容...
INSERT INTO test VALUES (1, null, null, null), (1, null, null, null);
……毫无怨言。我猜 (1, null, null, null) 不等于自身,因为包含了空值。如果是这种情况,有什么办法可以处理这种关系吗?
任何帮助,将不胜感激!