#c_sharp #sql #база_данных #net
Допустим есть приложение, которое работает с БД. Приложение занимается вставкой каких-то записей и какое-то значения должно быть всегда уникальным(Это не первичный ключ). Например в одной категории не может товара с одинаковыми названиями. Так вот, на стороне чего лучше делать такие ограничения? Если делать на стороне БД, то БД сама все проанализирует и вернет ошибку, если делать на стороне приложения, то понадобится писать логику. Просто, я глянул некоторые исходники и обнаружил, что ограничения делаются на уровне приложения, а на стороне БД опускаются.
Ответы
Ответ 1
Общие ограничения - ограничения предметной области - лучше делать на стороне СУБД, т.к. их разделяют все приложения. Это, помимо контроля над данными, позволит избежать дублирования кода.Ответ 2
Простые проверки типа уникальности поля обычно делают на двух сторонах: и в БД, и в коде. Особенно если используются реляционные БД. Вот почему: Наличие ограничений в БД объясняется тем, что БД должна содержать валидные и консистентные данные. В случае реляционных БД они уже обладают встроенными средствами таких проверок, поэтому ими пользуются. Наличие валидации в коде объясняется тем, что анализировать SQL ошибки -- сложно и некрасиво. Плюс, если данные под рукой, проще не ходить в базу, а проверить сразу. Что касается сложной логики валидации, то она обычно реализуется только с одной стороны. Такая логика уже является полноценными бизнес-правилами, а их дублирование чревато. БД же является всего лишь инструментом хранения, который можно и сменить, поэтому чаще всего такая логика находится на стороне кода.
Комментариев нет:
Отправить комментарий