@strelkovandreyvalerievich

Как мировая практика подсказывает проверять на уникальность при вставке строк в таблицу БД?

Добрый день, очень сложно было сформулировать вопрос, но вопрос прост.
Представим себе что есть приложение, которое имеет форму с текстовыми полями ТАБЕЛЬНЫЙ НОМЕР, ИМЯ, ФАМИЛИЯ, которая вставляет строки в таблицу базы данных.
Но в базе поле ТАБЕЛЬНЫЙ НОМЕР должен быть уникальным.

Вопрос, как и в каких случаях правильнее и "легче/дешевле" делать пытаться сначала кодом проверить есть ли такая строка в таблице и в случае имения - сообщить о уже имеющейся записи, или напрямую базой данных попытаться insert-нуть и ожидать либо exception с ошибкой (который потом красиво обработать, и красиво пользователю сообщить) или положительный ответ вставки.

Вроде элементарный вопрос, но хочется мнения услышать и может какие то подводные камни
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 2
terrier
@terrier
может какие то подводные камни

Ну, есть конечно.
Допустим вы проверяете из приложения, есть ли табельный номер в таблице. Находите, что нет и пытаетесь следующим запросом вставить строчку. Но между запросами такая строчка уже появилась и вам все равно надо обрабатывать исключение.
Поддержание консистентности данных - задача базы, никаких велосипедов тут изобретать не надо.
Ответ написан
Комментировать
Всё зависит от конкретных обстоятельств. На уровне БД проверка запросом может быть на порядок быстрее попытки вставить дубликат. На уровне приложения из-за накладных расходов разница будет меньше, иногда существенно.
А дальше в дело вступают вероятности. Насколько вероятно напороться на дубликат? Если такое явление редкость, то заморачиваться не нужно - делать уникальный ключ и сразу инсертить. Если большая часть попыток записи завершается ошибкой, можно попробовать сначала делать запрос, и в случае неудачи генерировать новый ключ в приложении. Но в этом случае напрашивается другое решение: сгенерировать ключ непосредственно во время вставки средствами БД и вернуть его как результат операции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы