2016-11-24 2 views
0

Я пытаюсь установить связь между CAR и ITEM таблиц.Как предотвратить дублирование пары в таблицу поиска?

Поскольку автомобиль может иметь тот же самый компонент, что и другие автомобили, а изделие можно использовать во многих автомобилях. Я решил использовать отношения «многие ко многим» для этой проблемы.

Этот вопрос заставляет меня удалить PK из обоих car_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

ответ

0

Вы не должны имеют уникальные ключи для каждого столбца, у вас должен быть уникальный ключ в комбинации столбцов. Это позволяет дублировать каждый столбец сам по себе, но не пару из них. Таким образом, вы можете иметь несколько ссылок на один и тот же номер car и несколько ссылок на один и тот же номер item_list, но не на несколько ссылок между теми же car и item_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

+0

Уважаемый @Barmar, если я отмечаю 'car_idcar, item_list_iditem_list' в качестве уникальных ключей для среднего стола, как я могу связать' автомобиль многократным и '' деталей многократным автомобиля к пункту '? – NoppNLearner

+0

Это сложный ключ. Каждому столбцу разрешено использовать несколько раз, это единственная ** комбинация **, которая должна быть уникальной. – Barmar

+0

Таким образом, вы можете иметь '(1, 1), (1, 2), (1, 3), (2, 3)', но вы не можете иметь '(1, 1), (1, 1) (1, 2), (1, 3), (2, 3) ' – Barmar