我有一个表,其中需要有一个由三个键组成的组合键:manufacturer, modelNumber和parentModelNumber。每一行/条目都有一个manufaturer的值和一个modelNumber或parentModelNumber的值。复合键是否可以由一个主键和两个唯一键组成,从而允许其中一个唯一键为空值?我一直在用头撞墙,有些人说“主键”是“唯一键”,但当“唯一键”被允许为空值而“主键”不被允许时,这怎么可能呢?我很困惑。
假设我可以这样做一个组合键,当组合键由一个‘主键’和两个‘唯一键’组成,其中一个‘唯一键’的值为空值时,INSERT ON DUPLICATE KEY UPDATE会对它求值吗?
我有人可能会建议一种不同的方法,我对此持开放态度。我只做了大约一个星期,我所知道的就是我知道的不多。我也开放阅读文章的参考资料。谢谢。
EDITED_______________________________________________
@TimBiegeleisen -假设我想输入一台适用于2001款福特f-150的交流发电机,但交流发电机上没有型号。我将制造商=福特,parentModelNumber =2001F-150,modelNumber = null。
现在假设我有一个由Mechman制造的交流发电机,它的型号是SK3345,但它不是为了适合特定的车辆而制造的。我将制造商= Mechman,modelNumber = SK3345,parentModelNumber = null。
我想在一个表中存储所有的交流发电机,并要求每个条目都有一个已知的制造商和一个已知的型号或它适合的已知车辆。我想我可以创建两个表,但是我想知道是否所有重复的字段都是一个好主意。每行的其他字段是尺寸和材料类型以及类似的详细信息。
发布于 2018-10-09 10:18:40
包含null的列不能是键或任何键的一部分。不幸的是,MySQL的非标准语法将关键字用于任何索引,即使是可以为空和非惟一的索引也是如此。实键必须定义为NOT NULL并具有唯一性约束( UNIQUE或PRIMARY key均可完成此任务)。
在这种情况下,您似乎在一个表中模拟了三种不同的东西。我建议至少创建三个表:一个表用于具有零件号的零件;一个表用于没有编号的零件;一个表用于将零件与其适合的模型相关联。真正的问题是对没有数字的部分使用什么键。
发布于 2018-10-09 10:18:28
一个建议。
PRIMARY KEY(manufacturer, parentModelNumber, modelNumber)INDEX(manufacturer, modelNumber)UNIQUE代码来处理上工作
https://stackoverflow.com/questions/52694591
复制相似问题