Должна ли моя СУБД или мое приложение обрабатывать ссылочную целостность базы данных?

Должны ли такие элементы, как внешние ключи, ограничения, значения по умолчанию и т. д., обрабатываться системой управления базами данных (в данном случае MS Sql 2005) или приложением? Я слышал мнения обеих сторон, и я, честно говоря, не уверен, в какую сторону идти.

Первоначально я собирался встроить его в базу данных, однако обнаружил, что это не всегда возможно с текущим дизайном базы данных, который у меня есть. Например, некоторые таблицы содержат циклические ссылки и не могут быть связаны с помощью ON UPDATE CASCADE. Еще одна проблема, с которой я сталкиваюсь, заключается в том, что существует вероятность того, что мы будем использовать несколько баз данных/серверов, а ограничения внешнего ключа не работают на связанных серверах.

У меня были некоторые разработчики, которые рекомендовали мне выполнять проверку данных на прикладном уровне и оставить базу данных просто как место для хранения данных. Мне нравится эта идея, но я во многих местах читал, что лучше встроить ссылочную целостность в базу данных, чтобы разрешить транзакции, которые не проходят через прикладной уровень. Я согласен с этим, хотя, когда мы закончим, все транзакции базы данных должны проходить через приложение. Даже если мы решим создать надстройки позже, мы используем инфраструктуру ObjectModel, поэтому запросы на вставку/обновление/удаление никогда не придется переписывать.

Итак, мой вопрос: в этой ситуации вы по-прежнему рекомендуете встраивать ссылочную целостность в базу данных или вместо этого можно встроить ее в прикладной уровень? И почему?


person Rachel    schedule 08.10.2010    source источник


Ответы (3)


Вы должны как можно больше поддерживать целостность данных в базе данных. Это «бесплатно», как только вы объявите об этом, и гарантируется применение независимо от того, как данные попадают в базу данных. Это, как мне кажется, не составляет труда.

Вы привели несколько примеров типов целостности базы данных, которые не могут быть декларативно указаны в базе данных. В этих случаях, очевидно, вы должны запрограммировать целостность на средний уровень или интерфейс и надеяться на лучшее.

person Larry Lustig    schedule 08.10.2010
comment
Это не совсем бесплатно. Во время вставок, удалений и обновлений возникают некоторые затраты на производительность, поскольку БД должна обеспечивать RI. - person Dharmendar Kumar 'DK'; 21.11.2011

Используйте базу данных для того, что она делает лучше всего. Включена ссылочная целостность — она встроена в базу данных и гарантирует, что ваши данные находятся в непротиворечивом состоянии.

Если это не подходит для чего-то конкретного в вашем приложении, постройте вокруг него логику/модель предметной области вашего приложения.

Лично я, если возможно, добавил бы ссылочную логику как в приложение, так и в базу данных (глубокая защита).

person Oded    schedule 08.10.2010

Система управления базами данных, когда вы можете, приложения, когда вы не можете. Вы хотите обеспечить соблюдение самой дальней из возможных технологий, чтобы все, что построено на ее основе, могло ее использовать.

person Beth    schedule 08.10.2010