is_current_productsおよびテーブルにあるものはawaiting_approvals、個別のテーブルではなく、列として格納する必要があります。
現在の製品は(顧客がサイトにアクセスするたびに)頻繁に照会されるため、最初にis_current_productsテーブルをフェッチしてから結果を表示するのは大きなオーバーヘッドになりますproducts。テーブルを並べ替えるときは、さらに大きな頭痛の種になりproductsます。
これをどのように設計するかというproductsとproduct_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を含む現在のバージョンに変更されます。
この設計では、他のすべてのバージョンをそのままにして、古いバージョンに戻すこともできます。
お役に立てれば。