Как мировая практика подсказывает проверять на уникальность при вставке строк в таблицу БД?
Добрый день, очень сложно было сформулировать вопрос, но вопрос прост.
Представим себе что есть приложение, которое имеет форму с текстовыми полями ТАБЕЛЬНЫЙ НОМЕР, ИМЯ, ФАМИЛИЯ, которая вставляет строки в таблицу базы данных.
Но в базе поле ТАБЕЛЬНЫЙ НОМЕР должен быть уникальным.
Вопрос, как и в каких случаях правильнее и "легче/дешевле" делать пытаться сначала кодом проверить есть ли такая строка в таблице и в случае имения - сообщить о уже имеющейся записи, или напрямую базой данных попытаться insert-нуть и ожидать либо exception с ошибкой (который потом красиво обработать, и красиво пользователю сообщить) или положительный ответ вставки.
Вроде элементарный вопрос, но хочется мнения услышать и может какие то подводные камни
Ну, есть конечно.
Допустим вы проверяете из приложения, есть ли табельный номер в таблице. Находите, что нет и пытаетесь следующим запросом вставить строчку. Но между запросами такая строчка уже появилась и вам все равно надо обрабатывать исключение.
Поддержание консистентности данных - задача базы, никаких велосипедов тут изобретать не надо.
Всё зависит от конкретных обстоятельств. На уровне БД проверка запросом может быть на порядок быстрее попытки вставить дубликат. На уровне приложения из-за накладных расходов разница будет меньше, иногда существенно.
А дальше в дело вступают вероятности. Насколько вероятно напороться на дубликат? Если такое явление редкость, то заморачиваться не нужно - делать уникальный ключ и сразу инсертить. Если большая часть попыток записи завершается ошибкой, можно попробовать сначала делать запрос, и в случае неудачи генерировать новый ключ в приложении. Но в этом случае напрашивается другое решение: сгенерировать ключ непосредственно во время вставки средствами БД и вернуть его как результат операции.