【发布时间】:2010-09-30 14:20:13
【问题描述】:
我正在尝试创建一个关系,其中可能包含四个不同部分中的任何一个,但相同部分的任何集合都应该被视为唯一的。
示例: 一个任务必须有一个指定的公司,可以选择有一个指定的位置、工作组和程序。 分配可能没有没有位置的工作组。
假设我们有公司 A、B、C;位置 X、Y、Z;工作组 I、J、K 和程序 1、2、3。
所以有效的关系可以包括 A - X - 我 - 1 A - Z - 2 经过 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) 不等于自身,因为包含了空值。如果是这种情况,我有什么办法可以处理这种关系?
任何帮助将不胜感激!
【问题讨论】:
标签: mysql nullable composite-key unique-key