Транзакционные системы должны «всегда» обеспечивать соблюдение ссылочной целостности как можно ближе к базе данных.Большинство людей согласятся, что это лучше всего делать прямо в самой базе данных.Вы правильно поняли многие из преимуществ, позволяющих СУБД обеспечивать ссылочную целостность.
Я сказал «всегда» выше, потому что верю в здравый смысл и обдуманные решения, а не практические правила.
Одна из причин, по которой кто-то может не захотеть применять ссылочную целостность в базе данных, состоит в том, что у вас есть циклические отношения, когда родитель и ребенок должны указывать друг на друга, и невозможно вставить одну запись, потому чтодругого еще нет.Это оставляет вас с так называемым уловом-22.В этом случае вам может потребоваться обеспечить ссылочную целостность в логике программы.Тем не менее, лучшее место для этого - на уровне данных, а не на уровне приложений.
Еще одна причина, по которой некоторые люди не беспокоятся о ссылочной целостности, заключается в том, что данные доступны только для чтения.Это может произойти в базе данных отчетов или хранилище данных.Ссылочная целостность в базе данных создает индексы, которые используются для обеспечения взаимосвязей.Иногда это может быть проблема с пространством, но чаще всего это просто проблема увеличения нагрузки на хранилище данных из-за порядка требуемых операций.
Еще одна причина, по которой ссылочная целостность иногда не *Используется 1010 *, так как архивирование старых транзакционных данных может быть затруднено из-за сложных взаимосвязей между основными таблицами и таблицами транзакций.Вы можете легко оказаться в положении, когда невозможно удалить какие-либо данные, независимо от того, сколько им лет, потому что они каким-то образом связаны с чем-то, что связано с другой вещью, которая необходима чему-то текущему.
Сказав все это, вам определенно следует начать с позиции использования функций ссылочной целостности вашей базы данных и отступать от этого только в том случае, если у вас есть действительно хорошая, хорошо продуманная причина.