целостность данных с помощью базы данных или стека приложений - PullRequest
0 голосов
/ 18 апреля 2011

Мой вопрос очень прост, и это скорее совет, который я ищу. Что лучше для обеспечения целостности данных: СУБД или код приложения?

Пример. С помощью СУБД мы можем использовать такие вещи, как триггеры, транзакции, процедуры и т. Д., Чтобы ПОЧТИ осуществлять надлежащее управление данными и убедиться, что все идет и укладывается в нужное место. То же самое можно сделать с помощью кода приложения.

Какой из них вы бы предпочли?

Код заявки или их комбинация?

1 Ответ

0 голосов
/ 18 апреля 2011

Как правило, вы хотели бы испечь любую целостность данных в состоянии покоя в СУБД.Требования к ссылкам, ограничения данных (длина и т. Д.) И тому подобное.Идея состоит в том, что СУБД должна сама по себе (отсоединяться и не зависеть от приложений, которые ее используют) поддерживать целостность и правила данных, которые она содержит.

ОниКлючевым моментом является то, что несколько приложений могут использовать эту базу данных.Даже если это не относится к конкретной базе данных или даже вряд ли будет иметь место в обозримом будущем, это все равно хороший дизайн.Не все приложения обязательно имеют одинаковую бизнес-логику или одинаковые проверки целостности.СУБД никогда не должна предполагать, что то, что она получает, проверено на целостность.

Приложения должны применять бизнес-логику и поддерживать целостность данных в движении.Он должен сделать все возможное, чтобы предотвратить даже попытки сохранить недействительные данные в базе данных.Но в любой заданной точке приложения вполне может быть разумно предположить, что оно «знает» все другие данные в базе данных.Приложение может применить логику к небольшому фрагменту данных, которые в настоящее время хранятся, а затем попытаться взаимодействовать с базой данных, чтобы сохранить ее.

Но задача базы данных - знать и поддерживать все данных, а не только то, что в настоящее время используется приложением.Таким образом, если приложение может считать, что оно имеет достаточно хороший фрагмент данных, база данных может не совпадать на основании состояния некоторых других данных, которые приложение не использовало.Вполне допустимо, чтобы база данных затем возвращала приложению ошибку, сообщающую о наличии проблемы с отправляемыми данными.Приложение должно уметь обрабатывать такие ошибки.

Подводя итог ...

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

С точки зрения СУБД, «активные данные» - это все данные, а СУБД отвечает за поддержаниецелостность всех данных.Как правило, данные находятся в состоянии покоя и статичны и должны при любом снимке таблицы быть «хорошими данными».

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