我有一个表,其中需要一个由三个键组成的复合键:manufacturer, modelNumber
和parentModelNumber
每行/每个条目的值都为manufaturer
,其中任一值都为modelNumber
或parentModelNumber
。复合键是否可以由一个主键和两个唯一键组成,以便可以将其中一个唯一键设为空值?我一直在敲打墙,有人说“主键”是“唯一键”,但是当“唯一键”被允许为空值而“主键”是怎么回事呢?不?我很困惑。
假设我可以用这种方式制作一个复合键,当它由一个“主键”和两个“唯一键”组成,其中一个“唯一键”的值为空时,将INSERT ON DUPLICATE KEY UPDATE
进行评估?
我可能会建议我接受一种不同的方法。我只做了大约一个星期,而我所知道的只是我并不了解。我也开放阅读文章的参考。谢谢。
EDITED _________________________________________________
@TimBiegeleisen-假设我要输入适合2001年福特f-150的交流发电机,但交流发电机上没有型号。我将拥有制造商=福特,parentModelNumber = 2001 F-150,modelNumber =空。
现在假设我有一个由Mechman生产的交流发电机,其型号为SK3345,但并非为适应特定车辆而生产。我需要制造商= Mechman,modelNumber = SK3345,parentModelNumber = null。
我想将所有交流发电机存储在一张桌子中,并要求每个条目都具有一个已知的制造商,以及一个合适的已知型号或已知车辆。我想我可以从中制作两个表,但是然后我想知道是否所有重复字段都是一个好主意。每行的其他字段是尺寸和材料类型以及类似的详细信息。
答案 0 :(得分:2)
包含null的列不能是键或任何键的一部分。不幸的是,MySQL具有一种非标准的语法,该语法将单词KEY用作任何索引,甚至是可为空且非唯一的索引。实键必须定义为NOT NULL并具有唯一性约束(由UNIQUE或PRIMARY KEY来完成)。
在这种情况下,您似乎在一个表中建模三个不同的事物。我建议至少创建三个表:一个表带有零件编号的零件;一张桌子,上面没有数字;一张表格,将零件与其适合的模型相关联。真正的问题是,对于没有数字的零件要使用什么键。
答案 1 :(得分:0)
一个建议。
UNIQUE
键的问题。PRIMARY KEY(manufacturer, parentModelNumber, modelNumber)
INDEX(manufacturer, modelNumber)