Следует ли вводить ограничения на уровне базы данных, а также на уровне приложения?

Если вы следуете школе Джеффа database-design Этвуда, согласно которой table-design база данных - это просто table-design тупая система хранения и database-modeling поиска данных, тогда вы бы table-design поместили всю проверку на schema-design уровень приложения.

Однако table-design я считаю, что приложения database-architecture похожи на маленьких детей. Без table-design отметки они будут разбрасывать database-modeling все по комнате. Убирать беспорядок database-design придется родителям. В этом table-design случае очистку будут проводить database-design администраторы баз данных.

Однако schema-design я думаю, что вам нужно быть table-design осторожным при использовании table-design каждой функции целостности table-design данных базы данных только database-design потому, что она там есть. Перегрузка table-design базы данных ограничениями schema-design внешнего ключа и триггерами database-modeling может создать больше проблем, чем table-design вы думаете. Я предпочитаю database-modeling использовать внешние ключи database-architecture только в таблицах, которые database-design очень тесно связаны, например database-modeling в паре таблиц заголовок / детали. Если database-design вы начнете добавлять внешние database-modeling ключи повсюду, вы можете database-architecture получить неуправляемую базу database-architecture данных.

Я редко использую schema-design триггеры. Я думаю, что они schema-design делают базу данных очень database-design непрозрачной. Вы вводите table-design простую команду обновления schema-design / вставки / удаления, и могут database-modeling произойти странные вещи. Думаю, есть schema-design два места, где триггеры неизбежны:

  1. Когда database-architecture у вас нет исходного кода schema-design для приложения, записывающего database-modeling данные в базу данных, и вам schema-design необходимо изменить поведение. Ваш schema-design единственный выход - триггеры.

  2. Если database-architecture вы выполняете операции CRUD database-design с представлением. Триггеры database-architecture являются обязательными для database-modeling операций вставки / обновления database-modeling / удаления.

Я обычно провожу table-design базовую проверку в приложении. Таким database-design образом, пользователь получает database-modeling немедленную обратную связь database-modeling о том, что что-то не так. Сложную database-design проверку, которая требует database-modeling поиска связанных таблиц, вероятно, лучше database-design всего проводить в базе данных database-design (как и простую проверку, которую database-modeling выполняет приложение). Я table-design бы сказал, что некоторые database-architecture формы проверки практически table-design невозможно гарантировать schema-design на уровне приложения без database-design использования сложных стратегий database-architecture блокировки.

Если у вас есть database-modeling несколько приложений, возможно, написанных database-design на разных языках и на разных table-design платформах, тогда появляется table-design больше аргументов в пользу table-design того, что на уровне базы schema-design данных нужно больше проверять. Вероятность database-architecture того, что два или более приложений, написанных database-design разными программистами, выполнят schema-design одинаковую проверку, довольно table-design мала. Лучше всего делать database-modeling это в одном месте.

В этом table-design мире Джефф Этвуды посоветовали schema-design бы вам написать веб-службу, с database-architecture которой все приложения будут database-modeling взаимодействовать. Веб-служба schema-design выполняет проверку данных. Это database-architecture позволяет базе данных оставаться database-design тупым контейнером для хранения, что database-design позволяет переключать механизмы database-modeling базы данных. На самом деле database-design вы редко меняете движки баз database-design данных (если только вы не table-design начали с Microsoft Access!). Если database-design вы пишете веб-сервисы исключительно database-design для централизации проверки database-modeling данных, я думаю, вы переборщите.

database-design

2022-09-30T00:37:29+00:00
Вопросы с похожей тематикой, как у вопроса:

Следует ли вводить ограничения на уровне базы данных, а также на уровне приложения?