0

Som Im は、ベンダーがサイトに表示される製品を追加できる e コマース システムを設計しようとしています。ベンダーは製品の詳細を編集/更新できますが、管理者が確認するまでは「公開」しないでください。

さまざまな製品を表すいくつかのモデルがあります。これはそのような製品の 1 つの設計ですが、この同じシステムがすべての製品タイプに適用されます。

ダイアグラムは次のとおりです。ここに画像の説明を入力

このアプローチの長所と短所についてフィードバックをいただけますか。この問題を解決するためのより良いアプローチはありますか。これはスケーラブルですか?

ありがとう

4

1 に答える 1

0

is_current_productsおよびテーブルにあるものはawaiting_approvals、個別のテーブルではなく、列として格納する必要があります。

現在の製品は(顧客がサイトにアクセスするたびに)頻繁に照会されるため、最初にis_current_productsテーブルをフェッチしてから結果を表示するのは大きなオーバーヘッドになりますproducts。テーブルを並べ替えるときは、さらに大きな頭痛の種になりproductsます。

これをどのように設計するかというproductsproduct_versions、2つのテーブルがあります。ここで、productsは承認されたすべての情報をproduct_versions表し、承認されているか履歴であるかに関係なくすべての情報を表します。

大まかなスキーマ:

products
-id
-current_version_id
-#all the product information from newest approved version#

product_versions
-id
-product_id
-approved_by (can be null)
-approved_on (can be null)
-#all the product information from this version#

現在の製品情報を表示するには、productsテーブルにアクセスするだけで十分です。

承認待ちのバージョンをフェッチするには、approved_byまたはapproved_on属性がnullであるすべてのProductVersionをフェッチするだけです。

バージョンを承認するために、authorized_byとapproved_onがproduct_versionで変更され、製品の情報がcurrent_version_idを含む現在のバージョンに変更されます。

この設計では、他のすべてのバージョンをそのままにして、古いバージョンに戻すこともできます。

お役に立てれば。

于 2012-08-04T19:05:26.400 に答える