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