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