Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Ограничения ну уровне приложения или ограничения на уровне БД?

#c_sharp #sql #база_данных #net


Допустим есть приложение, которое работает с БД.

Приложение занимается вставкой каких-то записей и какое-то значения должно быть всегда
уникальным(Это не первичный ключ).

Например в одной категории не может товара с одинаковыми названиями.

Так вот, на стороне чего лучше делать такие ограничения?

Если делать на стороне БД, то БД сама все проанализирует и вернет ошибку,
если делать на стороне приложения, то понадобится писать логику.

Просто, я глянул некоторые исходники и обнаружил, что ограничения делаются на уровне
приложения, а на стороне БД опускаются.
    


Ответы

Ответ 1



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

Ответ 2



Простые проверки типа уникальности поля обычно делают на двух сторонах: и в БД, и в коде. Особенно если используются реляционные БД. Вот почему: Наличие ограничений в БД объясняется тем, что БД должна содержать валидные и консистентные данные. В случае реляционных БД они уже обладают встроенными средствами таких проверок, поэтому ими пользуются. Наличие валидации в коде объясняется тем, что анализировать SQL ошибки -- сложно и некрасиво. Плюс, если данные под рукой, проще не ходить в базу, а проверить сразу. Что касается сложной логики валидации, то она обычно реализуется только с одной стороны. Такая логика уже является полноценными бизнес-правилами, а их дублирование чревато. БД же является всего лишь инструментом хранения, который можно и сменить, поэтому чаще всего такая логика находится на стороне кода.

Комментариев нет:

Отправить комментарий