如何基于两个外键创建复合主键?并验证所写SQL代码的正确性
你的SQL实现是完全正确的!
你的这段创建表3的代码完美匹配了你的需求,我来帮你拆解验证一下:
复合主键设置符合预期:
CONSTRAINT pk_myConstraint PRIMARY KEY (pizza, ingredient)成功将pizza和ingredient设为复合主键,这能保证表3中不会出现重复的「披萨-配料」组合,正好适配你这种多对多关联的场景——同一个披萨可以对应多种配料,同一种配料也能用于多个披萨,复合主键能精准约束唯一记录。外键关联逻辑严谨:
你定义的两个外键约束:FK_pizzaRecipe关联表1的pizza主键,确保表3里的披萨都是表1中已存在的合法条目;FK_ingredientBase关联表2的ingredient主键,确保表3里的配料都是表2中已登记的合规配料。
这两个约束能有效维护数据的参照完整性,避免出现无意义的脏数据。
几点小提醒
- 要保证表3的
pizza、ingredient字段的数据类型(varchar(12))和表1、表2中对应的主键字段完全一致,否则外键约束会创建失败; - 如果表3已经存在数据,创建这些约束前要先检查现有数据:确保所有
pizza值都在表1中存在,所有ingredient值都在表2中存在,同时没有重复的「披萨-配料」组合,不然约束创建会直接报错。
内容的提问来源于stack exchange,提问作者czarniecki




