私が直面している状況は、さまざまな時点で異なる店舗で保管されている在庫在庫を表すために(メモリの記憶域使用量に関して)最善の方法を実行しようとしていることです。MySQLの最適なフィールドのメモリ使用量
表:店舗
異なる店の一覧ですテーブル:セットアップは以下の通りである。
- ストアID(PK)
- 店舗名
- 。 ..その他の詳細
タブル:在庫
- ストックID(PK)
- 証券名前
- ...その他の詳細
表:ショップ証券ホールディングス
- ストア同上
- 証券同上
- 日
- 数量
(ストアID、証券取引イドと日付Store IdとStocを使用して、主キーを共同して動作させる
表:ショップ証券ホールディングス
- ストア同上
- 日
- 証券外部キーとしてK Id)が
代わりに私は、JSON文字列として保有株式を保存するために考えましたホールディングス
したがって、たとえば2011年1月1日に店舗1に50レモン(コード= 1)、100個のオレンジ(コード= 2)、20マンゴー(= 3)があるとすると、3つの設定は次のように表現します:
オプション1:
Store Id, Stock Id, Date, Quantity
1 , 1, 2011-01-01, 50
1 , 2, 2011-01-01, 100
1 , 3, 2011-01-01, 20
オプション2:
Store Id, Date, Stock Holdings
1 , 1, 2011-01-01, \{1,50;2,100;3,20\}
オプション3:
は、次のように2つのテーブルにそれを分割することにより、オプション1で日付を保存するの複製を減らすために、次のようになります。
Index, Store Id, Date
1, 1, 2011-01-01
Index, Stock Id, Stock Holdings
1, 1, 50
1, 2, 100
1, 3, 20
だから、質問は次のとおりです。
私の速度やストレージの考慮されるもの異なる実装のために。私の考えは、日付情報が複製されていないので、オプション3とオプション2がより良い選択である可能性が高いです。
オプション2では、動的に割り当てられたJSON文字列を格納するメモリはありますか?私の言うことは、JSON文字列がかなり大きくなる可能性があり、結果としてその文字列を許可する必要があるということです。 JSON文字列に基づいて、新しいエントリが合計割り当てを必要とするのか、必要なメモリ量しか必要としないのでしょうか?私の理解は、varcharを使用するとメモリを動的に割り当てることになります。 varcharを使用することをお勧めしますか?
オプション3の「インデックス」フィールドは何ですか?代理キー(自動番号)の場合は、代わりに「在庫ID」を使用することができます(私が何かを忘れていない限り)。 – Aaron