0

この質問がSOで何度か尋ねられたのを見てきましたが、まだ自分に合った答えが見つかりません。

シンプルな在庫管理システムを備えた e コマース システムを設計しています。基本的に、各製品は多くの属性を持つことができ、各属性バリエーション セットは異なる数量を持つことができます。商品と属性の関係は多対多で他で管理されており、在庫表は単に「数量」の管理のみを行っています。

したがって、私の現在のアプローチは、属性値IDの組み合わせをデータベースに文字列として保存することです(およびmd5を使用して、検索を高速化するために別の列に保存します)。このアプローチにより、属性のリストを指定して在庫数量をすばやく検索でき、管理者から簡単に編集することもできます。

表には次の列があります (主な構造のみに焦点を当てるために少し省略しています)

  `id` INT UNSIGNED NOT NULL ,
  `product_id` INT UNSIGNED NOT NULL ,
  `container_id` INT UNSIGNED NULL ,
  `lot_id` INT UNSIGNED NULL DEFAULT NULL ,
  `facility_id` INT UNSIGNED NULL DEFAULT NULL ,
  `inventory_item_status_type_id` INT UNSIGNED NOT NULL ,
  `feature_value_ids` TEXT NULL DEFAULT NULL ,
  `key` VARCHAR(255) NULL DEFAULT NULL ,
  `serial` VARCHAR(255) NULL ,
  `quantity_onhand` INT UNSIGNED NOT NULL DEFAULT 0 

この方法の欠点は、

  1. 製品にこれらの属性がある場合: 1,2,3,4,5
  2. インベントリは 1,3,4 および 1,2,3,4 に対して定義されていますが、1,2,3,4,5 に対しては定義されていません
  3. ユーザーが 1、2、3、4、5 を選択した場合、可能な望ましい動作の 1 つは、システムが 1、2、3、4 の数量を使用することです (これは取得できる最も近い組み合わせです)。この場合、最も近い組み合わせに対して全文一致を使用する必要がある場合があります

この問題について、上記のアプローチに何か問題があると思いますか? また、どのように別の方法をとりますか?

4

1 に答える 1

0

次の情報を含むテーブルを更新する時間を確保できる場合:属性id tuple => productテーブルに更新があるたびにproduct_idのリストを作成すると、動的計画法を使用して属性のサブセットをすばやく検索できます。

完全に一致するものを検索するために、属性値ids文字列をmd5する必要がある理由がわかりません。MySQLは、任意の列にインデックスを付けることができるはずです。

于 2013-03-15T13:32:48.713 に答える