如何防止将重复对插入查找表?

时间:2016-11-24 04:01:13

标签: mysql sql

我正试图在CARITEM表之间建立关系。

由于汽车可以与其他汽车具有相同的部件,并且可以在许多汽车中使用物品。我决定在这个问题上使用多对多的关系。

此问题迫使我从中间表上的PKcar_idcar中删除item_list_iditem_list

但......我如何防止重复对(red box below)的输入被插入

@Barmar要求的其他信息:

CREATE TABLE `car_item` (
   `id_car_item` int(11) NOT NULL AUTO_INCREMENT,
   `car_idcar` int(11) NOT NULL,
   `item_list_iditem_list` int(11) NOT NULL,
   PRIMARY KEY (`id_car_item`),
   UNIQUE KEY `car_idcar_UNIQUE` (`car_idcar`),
   UNIQUE KEY `item_list_iditem_list_UNIQUE` (`item_list_iditem_list`),
   KEY `fk_car_has_item_list_item_list1_idx` (`item_list_iditem_list`),
   KEY `fk_car_has_item_list_car1_idx` (`car_idcar`),
   CONSTRAINT `fk_car_has_item_list_car1` FOREIGN KEY (`car_idcar`) REFERENCES `car` (`idcar`) ON DELETE NO ACTION ON UPDATE NO ACTION,
   CONSTRAINT `fk_car_has_item_list_item_list1` FOREIGN KEY (`item_list_iditem_list`) REFERENCES `item_list` (`iditem_list`) ON DELETE NO ACTION ON UPDATE NO ACTION
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

此处完整架构创建脚本:http://pastebin.com/1vPYxswd

enter image description here

1 个答案:

答案 0 :(得分:0)

每列上不应该有唯一键,您应该在列组合上有唯一键。这允许每列自己复制,但不能复制它们。因此,您可以对同一个car进行多次引用,并对同一item_list进行多次引用,但不能在同一caritem_list之间使用多个链接。

CREATE TABLE `car_item` (
   `id_car_item` int(11) NOT NULL AUTO_INCREMENT,
   `car_idcar` int(11) NOT NULL,
   `item_list_iditem_list` int(11) NOT NULL,
   PRIMARY KEY (`id_car_item`),
   UNIQUE KEY `car_idcar_iditem_list_UNIQUE` (`car_idcar`, `item_list_iditem_list`),
   CONSTRAINT `fk_car_has_item_list_car1` FOREIGN KEY (`car_idcar`) REFERENCES `car` (`idcar`) ON DELETE NO ACTION ON UPDATE NO ACTION,
   CONSTRAINT `fk_car_has_item_list_item_list1` FOREIGN KEY (`item_list_iditem_list`) REFERENCES `item_list` (`iditem_list`) ON DELETE NO ACTION ON UPDATE NO ACTION
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

请参阅Creating UNIQUE constraint on multiple columns in MySQL Workbench EER diagram