Предотвращение дублирования записей в MySQL

В настоящее время я работаю над эволюционным алгоритмом, который попытается найти оптимальную конфигурацию параметров для данной проблемы.

Я пытаюсь создать записи в таблице MySQL, в которой будет храниться конфигурация, в которой каждый параметр будет представлен в виде столбца таблицы. Если конфигурация уже была предпринята, я хотел бы предотвратить ее дублирование.

Есть ли механизм для этого на уровне базы данных/ORM или мне следует создать программную логику для предотвращения дублирования записей?


person K-Dawg    schedule 08.09.2015    source источник
comment
налепить уникальный ключ на соответствующие поля в вашей таблице?   -  person Marc B    schedule 08.09.2015
comment
Уникальность будет состоять из комбинации всех столбцов. Я не думаю, что первичного ключа будет достаточно. Поиск должен выполняться по всем столбцам при определении того, была ли уже предпринята попытка настройки.   -  person K-Dawg    schedule 08.09.2015
comment
что и делает уникальный ключ. alter table foo add unique key (field1, field2, ..., fieldN). ключи могут иметь несколько полей в них, в конце концов...   -  person Marc B    schedule 08.09.2015
comment
N может быть большим. Выруби себя.   -  person Drew    schedule 08.09.2015


Ответы (1)


Есть ли механизм для этого на уровне базы данных/ORM?

Да, объявите или определите столбец Configuration как Primary Key или Unique Key при создании таблицы, чтобы избежать дублирования.

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

Допустим, ваши col1, col2, col3, col4 являются частью конфигурации, и вы хотите, чтобы они были уникальными. Затем сделайте их составным первичным ключом, говоря:

primary key (col1, col2, col3, col4)
person Rahul    schedule 08.09.2015
comment
Рахул, я не думаю, что это правильно, уникальность будет комбинацией всех столбцов. Первичного ключа будет недостаточно, так как поиск должен выполняться по всем столбцам при определении того, была ли уже предпринята попытка настройки. - person K-Dawg; 08.09.2015
comment
@PrimeByDesign, я упомянул столбец configuration, потому что я не уверен в структуре вашей таблицы, но если она включает несколько столбцов, вы всегда можете сделать ее составным ключом. Почему вы беспокоитесь о поиске ключей. если вы правильно спроектируете свою таблицу с правильным индексом, вам не следует об этом беспокоиться. - person Rahul; 08.09.2015
comment
Так что же помешает мне сохранить дубликат конфигурации с другим первичным ключом? @Рахул - person K-Dawg; 08.09.2015
comment
@PrimeByDesign, В соответствии с концепцией СУБД, для каждой таблицы может быть только один PK, поэтому это невозможно. Не так ли? - person Rahul; 08.09.2015
comment
@ Рахул Это моя проблема. Мне нужно убедиться, что комбинация всех столбцов уникальна в базе данных. - person K-Dawg; 08.09.2015
comment
Означает ли это, что я должен сделать это, используя логику кода? - person K-Dawg; 08.09.2015
comment
посмотрите, что Марк сказал выше. Прекратите печатать здесь, введите это в mysql. А теперь сделай это - person Drew; 08.09.2015
comment
@PrimeByDesign, вы запутались. Это то, что я сказал, что определите или сделайте все задействованные столбцы составным первичным ключом, и механизм БД позаботится об их уникальности. Подумайте о том, чтобы прочитать о первичном ключе для получения дополнительной информации. - person Rahul; 08.09.2015
comment
Ах, Рахул! Теперь я понимаю... ALTER TABLE votes ADD UNIQUE unique_index(user, email, address); как здесь: stackoverflow.com/questions/635937/ - person K-Dawg; 08.09.2015