Должна ли моя СУБД или мое приложение обрабатывать ссылочную целостность базы данных? - PullRequest
1 голос
/ 09 октября 2010

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 09 октября 2010

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

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

4 голосов
/ 09 октября 2010

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

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

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

2 голосов
/ 09 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...