Вставки уникальных ключей SQL - PullRequest
5 голосов
/ 05 ноября 2010

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

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

Это ...

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

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

Ответы [ 4 ]

3 голосов
/ 05 ноября 2010

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

РЕДАКТИРОВАТЬ: Чтобы избежать путаницы, я не говорю, что вообще не имеют уникальный индекс.Он должен быть там, но не должен быть основным средством проверки уникальности.

2 голосов
/ 05 ноября 2010

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

1 голос
/ 05 ноября 2010

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

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

0 голосов
/ 05 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...