我正在尝试创建一个关系,其中可能包含四个不同的部分,但是相同部分的任何集合都应该被视为唯一。
例如: 一个任务必须有一个指定的公司,可以选择地拥有一个指定的位置、工作组和程序。 一个任务如果没有位置,就不能有工作组。
假设我们有公司 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) 不等于其本身,因为包括了空值。如果是这样的话,有没有办法处理这个关系呢?
感激不尽!