Duplicate Entry Error для не AI-колонки

компьютеры MySQL sql

Собственно есть некая таблица:
DROP TABLE IF EXISTS `vendordebts`;
CREATE TABLE `vendordebts` (
`vendor_ID` int(11) NOT NULL,
`debt` float default NULL,
PRIMARY KEY (`vendor_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

При попытке инсерта двух значений с одинаковым полем vendor_ID вылезает вышеозначенный error.
Не знаю что там у этого MySQL-ля не так с его электронным мозгом, но раньше я вроде бы мог добавлять две записи с одинаковым значением PK. Базу саму импортировал из Workbench-а, но так как это чмо установилось Foreign-keys и упорно не желало обновлять в соответствии с EER-моделью - пришлось вручную удалить из SQL-ля все упоминания о каких либо FK. Даже не знаю что с этим квазимодой делать...

Примечание:
А по ER-феншую это нормально будет выглядеть? У меня ТЗ - привести БД к 3NF, учитывая то что я даже толком то и не понял чего это и как( курс по БД пролистал за 5-6 часов буквально ). Допускает ли 3NF отсутсвие в таблице PK ?

Примечание:
Для Debts да, но я эту таблицу для примера привел. У меня есть таблица VendorPrices где есть поля Vendor_ID и Wine_ID - оба могу повторятся, в придачу к ней есть таблица ClienCart где опять же Client_ID и Wine_ID. Я даже не знаю как можно по другому то спроектировать было...

Примечание:
Т.е. вы хотите сказать что я могу обеспечить уникальность связки из двух ключей? Т.е. не уникальность каждого поля по отдельности а именно обоих сразу? Как например 1,2 и 1,3 ?
Ответы:
Уберите первичный ключ с vendor_ID, поле являющееся первичным ключем должно быть уникальным.
> раньше я вроде бы мог добавлять две записи с одинаковым значением PK
Это навряд ли.
Таблица без ПК - это не по феншую, потому что тогда база становится нереляционной. СУБД поддерживает таблицы с одинаковыми строками, а теория - нет.
Самый простой выход - ввести суррогатный первичный ключ, то есть добавить поле id. Можно ещё подумать, а надо ли хранить на каждого vendor в этой таблице несколько строк, может эти debts на каждого vendor можно просто сложить.
Не забудьте, что ключ может состоять из нескольких полей.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.