Проверка уникальных значений из базы данных MySQL

#c# #asp.net #mysql

#c# #asp.net #mysql

Вопрос:

У меня есть форма, в которой есть несколько полей, каждое из которых должно быть уникальным само по себе. каков наилучший способ выполнить этот запрос?

Должен ли я открыть одно соединение и один mySqlAdapter и сделать:

 myDataAdapter.Fill(myDataSet, "table"); 
  

для каждого значения (каждый раз изменяя sql-запрос) или есть более оптимизированный способ сделать это

Заранее спасибо

Дорон Синай

Ответ №1:

Звучит как необычное требование. Если бы вы могли подробнее рассказать о специфике, лучшее решение могло бы предложить само себя.

Учитывая то, что вы сказали, я понимаю, что вам нужно знать, существует ли уже введенное значение любого из нескольких полей ввода в вашей форме в «таблице».

Представляются два варианта:

1) Запросить базу данных

Что-то вроде

 SELECT column1, column2 FROM table WHERE column1='value1' OR column2='value2'
  

Если вы не получили обратно ни одной строки, все значения были уникальными (обратите внимание, что другой пользователь приложения мог ввести те же значения сразу после выбора … решение этого вопроса является предметом другого вопроса, если вам нужна помощь там).

Если вы получите строки обратно, значения в возвращенных строках расскажут вам, что уже присутствовало в БД.

2) Заставьте базу данных обеспечить уникальность

Создайте уникальный индекс для каждого столбца, который должен быть уникальным. Обратите внимание, что размещение большого количества индексов в базе данных может значительно снизить производительность вставок и обновлений и потребляет дисковое пространство.

Обратите внимание, что вариант 1 может оказаться слишком медленным (в зависимости от размера вашей базы данных и аппаратного обеспечения) без указания индекса в полях, которые должны быть уникальными.

Комментарии:

1. Спасибо за ваш совет, я думаю, что я буду придерживаться подхода принудительной уникальности, поскольку у меня не так много данных

Ответ №2:

В дополнение к параметрам, указанным Эриком, я представлю еще один вариант. Вы можете загрузить все существующие значения, используя один вызов базы данных. Вероятно, вы хотите загрузить уникальные значения в HashSet по соображениям производительности. Затем сверьте значения формы с HashSet и убедитесь, что эти значения еще не существуют в HashSet.

Вот в чем дело. Вам нужно учитывать, о каком объеме данных вы здесь говорите. Если данные должны быть уникальными во всей таблице базы данных, вы, вероятно, захотите использовать ограничение уникальности, предложенное Эриком. Вы не хотите проблем с масштабируемостью в будущем, используя подход, о котором я упоминал выше, или создавая потенциально неэффективный SQL-запрос, о котором также упоминал Эрик.

Правильный ответ зависит от структуры и объема данных, для которых вам необходимо обеспечить уникальность.