当前位置:  开发笔记 > 编程语言 > 正文

MySQL问题 - 唯一键不能正常运行,还是我误解了?

如何解决《MySQL问题-唯一键不能正常运行,还是我误解了?》经验,为你挑选了1个好方法。

我正在尝试创建一个关系,其中可以包含四个不同部分中的任何一个,但是任何相同部分的集合都应该作为唯一处理.

示例:作业必须具有指定的公司,可以选择具有指定的位置,工作组和程序.作业可能没有没有位置的工作组.

我们假设我们有公司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)不等于它自己,因为包含了空值.如果是这种情况,有什么方法可以处理这种关系吗?

任何帮助,将不胜感激!



1> Michael Hare..:

这是一个功能(虽然不是我所期望的).

此主题建议使您的密钥成为主键以获得您期望的行为:

这是一个特性 - NULL值是未定义的值,因此两个NULL值不相同.可能会有点混乱,但是当你想到它时才有意义.

UNIQUE索引确保非NULL值是唯一的; 您可以指定您的列不接受NULL值.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有