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