ソフト削除を避けるため、私はごみ箱データベースを作成しています。メインのデータベースは、それに接続します。ここに2つの可能な接合アプローチの例がありますが、私はより効率的な入力を望んでいましたか?このシナリオでは、どのDB接合アプローチがより効率的ですか?
簡略化のため、Order
とInvoice
の2つのテーブルがあり、各請求書には1つの注文しかありません。
Order
-----
OrderId
InvoiceId
Description
Date
NumberOfStuffOrdered
Invoice
-------
InvoiceId
Description
Price
Tax
Shipping
これらのテーブルをごみ箱に接続するには、どちらの方法をとるべきかわかりませんでした。
アプローチ1:
DeletedOrder
------------
DeletedOrderId
OrderId
RecycleBinId
Date
Reason
DeletedInvoice
--------------
DeletedInvoiceId
InvoiceId
RecycleBinId
Date
Reason
アプローチ2:
DeletedRecords
--------------
DeletedRecordsId
RecordPrimaryKeyId
RecycleBinId
RecordType
Date
Reason
アプローチ1は、データベース内の多くのテーブルスペースを取りますが、それはテーブルごとに以下の行を持っているし、早くクエリ時間を持つことになりますシステムは成熟する。アプローチ2では、データベース内の各テーブルに対して追加の削除テーブルを作成する必要がなくなり、システムの成熟度が高まり、クエリが遅くなるため、
どれが全体的により効率的になるのでしょうか、それともこれにアプローチする方が良いでしょうか?
ありがとうございます。良いパフォーマンスは常に重要です! ;)ほとんどの場合、レコードを削除する必要があるときに、外部キーの関係を削除したり、カスケード削除することなく、参照整合性が維持されるように、データを保持したい。これにより、パフォーマンスにヒットすることなく、削除されたレコードを復元できるようになります。ごみ箱には、慎重に使用するカスケード削除機能があります。 –