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