下の写真のようなショッピング カートがあります。1 つの致命的な欠陥を除いて、セットアップは正常に機能します。注文すると、注文は製品にリンクされているため、製品を購入した後に製品を更新した場合、購入したときの製品の外観(価格を含む)を希望することを示す方法はありません. これは、バージョン管理が必要であることを意味します。
現在の私の計画は、新しい製品またはバリエーションが作成されるか、既存の製品が編集されたときに、データベースに製品またはバリエーションの複製を作成することです。購入時には、注文を製品ではなくバージョンにリンクします。
これはかなり単純に思えますが、バージョン管理の必要がないのはカテゴリだけであることがわかります (どのカテゴリにあったかは誰も気にしないため)。したがって、バージョンを設定する必要があります。
- 製品
- バリアント
- 各バージョンの属性のキー -> 値のペア
- 画像
私の現在の考えは、
注: 製品が作成されると、デフォルトのバリアントも作成されます。これは削除できません。
- 商品を作るとき
- 製品を製品テーブルに挿入します。
- デフォルトのバリアントを作成する
- 製品を products_versions テーブルに複製します
- 現在の id 列を product_id 列に置き換えます
- ID列を追加
- バリアントを variants_versions テーブルに複製します
- 現在の id 列を variant_id 列に置き換えます
- ID列を追加
- product_id 列を product_version_id 列に置き換えます
- 商品編集時
- 製品を製品テーブルに更新します。
- 製品を products_versions テーブルに複製します
- 現在の id 列を product_id 列に置き換えます
- ID列を追加
- すべての製品バリエーションを variants_versions テーブルに複製します
- 現在の id 列を variant_id 列に置き換えます
- ID列を追加
- product_id 列を product_version_id 列に置き換えます
- すべての variant_image_links を variant_Image_link_version テーブルに複製します
- 現在の variant_id 列を variant_version_id 列に置き換えます
- バリアントが追加されたとき
- バリアントをバリアント テーブルに追加します。
- 製品を products_versions テーブルに複製します
- 現在の id 列を product_id 列に置き換えます
- ID列を追加
- すべての製品バリエーションを variants_versions テーブルに複製します
- 現在の id 列を variant_id 列に置き換えます
- ID列を追加
- product_id 列を product_version_id 列に置き換えます
- バリアントの編集時
- バリアント テーブルのバリアントを更新します。
- 製品を products_versions テーブルに複製します
- 現在の id 列を product_id 列に置き換えます
- ID列を追加
- すべての製品バリエーションを variants_versions テーブルに複製します
- 現在の id 列を variant_id 列に置き換えます
- ID列を追加
- product_id 列を product_version_id 列に置き換えます
- すべての variant_image_links を variant_Image_link_version テーブルに複製します
- 現在の variant_id 列を variant_version_id 列に置き換えます
したがって、最終的な構造はフルサイズのように見えます
これはすべて素晴らしいように思えますが、大量の重複データのように見えることを除けば、たとえば、製品を更新すると、挿入されてから更新されていないにもかかわらず、バリアントが複製されます。また、これは大変な作業のようです。
これを行うより良い方法はありますか?