Существует в основном 3 «стандартных решения»:
Решение 1
Вам нужен продукт (как в вашем случае из-за ссылок на него).Это означает, что данные являются действительными, и единственное изменение заключается в том, что они «отсутствуют в наличии» или «отсутствуют в портфеле».В любом случае ваш бизнес-процесс часто требует, чтобы вы обрабатывали ситуации RMA или некоторые связанные с IRS вопросы, например ... это означает, что продукт не должен быть удален.Это просто другое «состояние» продукта, которое должно отражаться в вашей модели данных БД и т. Д.
Если вы обеспокоены производительностью, выполните некоторое профилирование ... при необходимости у вас есть множество оптимизацийопции ... обычно это RDBMS-зависимые, одна из которых - "разбиение" - каждая RDBMS имеет свою собственную механику, которая отличается гибкостью и т. д.
Решение 2
Вам вообще не нужны никакие данные ... просто выполните каскадное удаление и покончите с этим ...
Решение 3
Вам нужно толькоисторические данные, но никакому «будущему бизнес-процессу» никогда не понадобится эта сущность (то есть продукт) снова ... в этом случае обычным решением является создание архивных таблиц, которые заполняются перед каскадным удалением «активных / продуктивных таблиц».Небольшой вариант этой схемы - копирование необходимой информации в «зависимые строки» (счет в вашем случае) и просто удаление активной / производительной строки (т. Е. Продукта в вашем случае).
Заключение
Сложные системы имеют дело с множеством различных бизнес-процессов / вариантов использования и, таким образом, имеют тенденцию использовать все вышеперечисленные методы - каждый имеет свое место в зависимости от конкретных бизнес-процессов / вариантов использования ...