Обеспечение ограничений базы данных в коде приложения - PullRequest
2 голосов
/ 16 сентября 2011

Я работаю над своим первым настоящим веб-приложением asp.net, и я в некотором роде озадачен лучшим местом и методом, позволяющим отлавливать и обрабатывать нарушения ограничений базы данных. Предположим, у меня есть уникальное ограничение на столбец, и пользователь вводит что-то, что нарушает это уникальное ограничение. Должен ли я перехватить его на бизнес-уровне, вызвав базу данных, чтобы проверить, существует ли значение для этого столбца, или я позволю ему пройти весь путь до базы данных, и он выдаст исключение и обработает это в моем приложении?

Мне не нравится последний ответ, потому что имеет смысл обрабатывать столько, сколько вы можете на бизнес-уровне, прежде чем он достигнет базы данных. Но это также несколько проблематично, так как мое приложение управляется процедурами, которые реализуют базовые операции CRUD во всех таблицах. Поэтому для того, чтобы я обеспечил уникальность на бизнес-уровне, мне нужно создать процедуру для каждого возможного ограничения, чтобы я мог выполнить поиск перед обновлением или вставкой. Это просто кажется утомительным ... и я дублирую бизнес-правила, так как они существуют как в базе данных, так и на бизнес-уровне, поэтому, если что-то меняется, мне нужно не только изменить базу данных, но я должен изменить процедуру и код приложения.

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

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

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

Весь смысл ограничений состоит в том, чтобы иметь центральное местоположение (сервер БД), которое обрабатывает как можно большую часть проверки данных согласованным образом, независимо от того, как / где данные туда попадают. Повторное написание одной и той же логики в приложении переднего плана является излишним и излишне сложным. Что если что-то изменится в ограничении в БД (то, что ваше приложение считает недействительным, больше не является)? Вы все равно получите исключение.

Позвольте БД обрабатывать проверочные ограничения и обрабатывать исключения в вашем коде. Это позволяет всем средствам, которые вы используете для доступа и обновления данных, быть согласованными, поскольку БД обрабатывает их. Если что-то меняется, вы обновляете базу данных новыми ограничениями, и ваши приложения автоматически синхронизируются.

0 голосов
/ 16 сентября 2011

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

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