Grundsätzlich gibt es 3 "Standardlösungen":
Lösung 1
Sie das Produkt benötigen (wie in Ihrem Fall, weil die Rechnungen Referenzierung es). Dies bedeutet, dass die Daten VALID sind und die einzige Änderung darin besteht, dass sie "aus dem Lager" oder "aus dem Portfolio" wird. In jedem Fall müssen Sie in Ihrem Geschäftsprozess häufig RMA-Situationen oder IRS-bezogene Angelegenheiten behandeln ... das bedeutet, dass das Produkt nicht gelöscht werden darf. Dies ist nur ein anderer "Zustand" des Produkts, der von Ihrem DB-Datenmodell usw. widergespiegelt werden muss.
Wenn Sie sich mit Leistung befassen, machen Sie ein Profiling ... wenn nötig, haben Sie eine Vielzahl von Optimierungsmöglichkeiten. .. diese sind in der Regel RDBMS-abhängige, eine Technik zu sein „Partitionierung“ - jedes RDBMS hat seine eigene Mechanik, die usw. in Flexibilität unterscheiden
Lösung 2
Sie brauchen nicht irgendwelche Daten an alles ... mach einfach ein kaskadiertes Löschen und sei damit fertig ...
Lösung 3
Sie benötigen nur historische Daten, aber kein "zukünftiger Geschäftsprozess" wird jemals diese Entität benötigen (d. H. Produkt) wieder ... in diesem Fall ist es eine übliche Lösung, Archivtabellen zu haben, die gefüllt werden, bevor ein kaskadiertes Löschen auf den "aktiven/produktiven Tabellen" durchgeführt wird. Eine leichte Variante dieses Schemas ist das Kopieren der benötigten Informationen in die "abhängigen Zeilen" (Rechnung in Ihrem Fall) und einfach die aktive/produktive Zeile (d. H. Das Produkt in Ihrem Fall) zu löschen.
Fazit
Komplexe Systeme befassen sich mit vielen verschiedenen Geschäftsprozesse/Anwendungsfälle und neigen daher dazu, alle oben genannten Techniken zu beschäftigen - jeder hat seinen Platz depeding beteiligt an die spezifischen Geschäftsprozesse/Anwendungsfälle. ..
Diese Frage ist von Bedeutung, und das Problem wurde von einigen * sehr * glaubwürdigen Quellen anerkannt. –