Должны ли такие элементы, как внешние ключи, ограничения, значения по умолчанию и т. Д., Обрабатываться системой управления базами данных (в данном случае MS Sql 2005) или приложением? Я слышал мнения обеих сторон, и я, честно говоря, не уверен, куда идти.
Изначально я собирался встроить его в базу данных, однако обнаружил, что это не всегда возможно при существующем дизайне базы данных, который у меня есть. Например, некоторые таблицы содержат циклические ссылки и не могут быть связаны с помощью ON UPDATE CASCADE
. Еще одна проблема, с которой я сталкиваюсь, - это вероятность того, что мы будем использовать несколько баз данных / серверов, и ограничения внешнего ключа не работают на связанных серверах.
Некоторые разработчики рекомендовали мне проверить данные на прикладном уровне и оставить базу данных как место хранения данных. Мне нравится идея, но я читал во многих местах, что лучше встроить ссылочную целостность в базу данных, чтобы учесть транзакции, которые не проходят через прикладной уровень. Я согласен с этим, хотя, когда мы закончим, все транзакции с базой данных должны проходить через приложение. Даже если мы решим создавать надстройки позже, мы используем инфраструктуру ObjectModel, поэтому запросы вставки / обновления / удаления никогда не нужно переписывать.
Итак, мой вопрос: в этой ситуации вы все равно порекомендовали бы встроить ссылочную целостность в базу данных или все же можно вместо этого встроить ее в прикладной уровень? И почему?