2010-10-08 2 views
1

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

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

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

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

ответ

5

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

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

+1

Его не действительно «бесплатно». При вставках, удалении и удалении возникают некоторые издержки производительности, поскольку БД должна обеспечить RI. –

2

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

4

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

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

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

Смежные вопросы