0

所有している各アセット(ラップトップ、スクリーン、デスクトップ、スキャナーなど)に関する情報が記載されたテーブルがあります。また、アセットごとにカスタム列がある別のテーブルがあります(したがって、特定のデスクトップでは、「色」と呼ばれるカスタム列を持つことができます)...クイックシェマティック:

資産テーブル

AssetID     Description
---------------------------
1           Desktop HP79801

アセットカスタム列

AssetID     Column1     Column2
-----------------------------------
1           Color       BluRay ?

次に、各列の値を保存します。私が現在各ユニットに対してそれを行っている方法は次のとおりです。

AssetID     UnitID      Column1     Column2
-----------------------------------
1           1           Blue        Yes
1           2           Blue        No
1           3           Black       No
1           4           Blue        Yes

さて、私の質問ですが、これを行うためのより効率的な方法はありますか?また、効率的な方法で列の数を無限大に増やすにはどうすればよいですか?出来ますか ?

最後に、カスタム製品の属性を効率的に保存する方法は?

4

2 に答える 2

2

要するに、はい。

あなたが持っているものは、少しでもスケーラブルではありません。必要なのは、アセット用のテーブル、カスタムパラメータ用のテーブル、および「リンク」テーブルを用意することです。次に、複数の列ではなく、リンクテーブルに複数の値を入力します。

例として:

資産テーブル

AssetID     Description
---------------------------
1           Desktop HP79801

属性列

AssetAttr       Column1     
-----------------------------------
1               Color
2               Size

リンクテーブル

AssetID     UnitID      AttrId        AttrValue 
-----------------------------------
1           1           1             Blue
1           1           2             Big
1           2           1             Orange
1           2           2             Giant

属性がすべてモデル固有である場合はAssetId、アセットのカスタム列に列を追加することもできますが、すべての共有属性にアセットがない場合を除いて、個人的には追加しません。

これをさらにタグ付けすることもできます。属性テーブルにデータ型の注釈を付け、可能なデータ値を保持する属性テーブルに関連する別のテーブルを作成し、リンクテーブルに前述のテーブルのエントリのIDを挿入することもできます。

于 2012-10-03T18:50:04.990 に答える
0

もう1つの解決策は、dbより少ないスキーマを使用することです。私のお気に入りはモンゴです。もう1つのオプションは、CouchDBまたはそこにある多くのKey-Valueデータベースの1つです。

ここでnoSQL戦争を開始するわけではありませんが、これらのデータベースはそのような状況をより適切に処理します。1つのドキュメントにすべてのデータを格納し、結合やビューなしで取得できます。

于 2012-10-03T18:54:20.643 に答える