Вопрос

У меня есть таблица пользователей, которая имеет уникальное ограничение на имя пользователя (по понятным причинам).

Я использую EF 4.0 DAL для заполнения базы данных и в процессе кодирования метода CreateUser ().

Это...

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

Если бы вы также могли дать причины, почему это было бы здорово!

Это было полезно?

Решение

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

Редактировать: Чтобы избежать путаницы, я не говорю, нет уникального индекса вообще. Это должно быть там, но это не должно быть основным средством проверки на уникальность.

Другие советы

Я бы сказал, что лучше справиться с исключением. База данных предназначена для обработки уникальности имени пользователя, поэтому я представляю, что это может сделать это более эффективно, чем вы можете. Также он добавляет портативность и сплоченность к вашей системе. Если вы добавите пользователей в более чем на одном месте, вам придется дублировать имя пользователя, проверяющее или создаю метод, и в основном вы в конечном итоге перезаписываете то, что записан двигатель базы данных.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top