2

たとえば、100.000 人のユーザーがいる出会い系サイトを考えてみましょう。各ユーザーには、髪の色、喫煙、年齢、都市、性別など、約 30 の属性があります。一部の属性には bool、一部の int、一部の var または text があります。

これらの属性のうち約 20 が検索可能で、半分のユーザーはデータを入力しません。すべての値は、ユーザー プロファイル ページに表示されます。

以下の選択肢を考えていました。

  1. データを 4 つのテーブルに分割します。表 1 は主に検索されるデータに使用され、表 2 はほとんど入力されていない属性に使用され、表 3 は私のような大きなデータに使用され、表 4 の残りの部分には使用されます。
  2. ほとんどの属性について個別のテーブルであるため、各属性には独自のテーブルがあります。
  3. EAVモデルを使用。

最初のオプションが最適だと思います。それとも他に良い方法はありますか?

4

1 に答える 1

0

新しい属性を追加する必要があまりないと仮定すると、おそらく、すべてを 1 つの大きなテーブルに配置するだけでよいでしょう。通常、DBMS は NULL の格納においてかなり効率的です。NULL のインデックス作成も合理的である必要があります。一部の DBMS では、インデックスに NULL が含まれていません (Oracle)。

BLOB も恐れないでください。BLOB は行を「引き延ばす」傾向があり (BLOB の一部が行にインラインで配置されている場合、通常は DBMS 固有の方法で制御できます)、「データ クラスタリング」が低下します。 、しかし、これはあなたの目的にとってあまり重要ではありません。

いずれにせよ、最も自然なソリューションでは十分なパフォーマンスが得られないと判断する前に、代表的な量のデータを測定してください。

于 2012-04-20T15:06:42.850 に答える