2016-11-10 6 views
2

私はすでにthis記事を読んだことがあるため良い削除しても、私はeコマースサイトに最適なソリューションを懸念していますソフト削除またはハードeコマース

当社のシナリオ:

Productテーブル

ProductID Name Price 

注文詳細テーブル

OrderID ProductID 

たOrderDetailsテーブルには、製品が削除された後FKのProductIDは、Productテーブル

の商品コードにreferrencedあり、どのように歴史的な注文レポートを表示するつもりですか?

オプション:

ソフト削除の欠点 - それは、DBのストレージのパフォーマンスに影響を与え

ハード削除の欠点 - すべてのヘルプは素晴らしいことだレポート

をしながら、必要に余分なクエリに参加。

+0

ソフト削除はより良い方法でしょう。別の方法として、履歴データを保持し、元のテーブルからハードデータを削除する別のテーブルを作成することができます。 – Viki888

+0

@ viki888ありがとうございますが、現在はIsDeletedフィールドとDeletedDateフィールドでソフト削除を使用する予定です。必要に応じて、別のテーブルのデータを厳重に削除してアーカイブします。 – Lishna

答えて

0

私は間違いなくソフト削除します。特に、電子商取引の状況では。 ArchivedProductテーブルで削除された製品を保存し、次のことについて

方法:

SELECT 
* 
FROM 
OrderDetails RIGHT JOIN Product ON OrderDetails.ProductID = Product.ProductID 
UNION ALL 
SELECT 
* 
FROM 
OrderDetails RIGHT JOIN ArchivedProduct ON OrderDetails.ProductID = ArchivedProduct.ProductID 

あなたは

を言うとき、それはDBのストレージのパフォーマンスに影響を与え

はい、あります全体的に3つのテーブルのサイズに依存するパフォーマンス面でのオーバーヘッドです。

後でクエリのパフォーマンスを向上させたい場合は、以前の「削除済み」製品の一部を自分の考えに基づいてArchivedProductテーブルから削除することができます(たとえば、 ...)、または2番目のSELECTステートメントにいくつかの制約を追加します。ハードな削除よりも安全な位置にいます。

関連する問題