2011-12-18 13 views
1

私はユーザーを表すテーブルがあるとしましょう:id, nameテーブルは巨大で約1億行あります。 また、ユーザーにはいくつかの不動産があります。これはオプションのフィールドなので、ユーザーのごく一部(5%)が提供しています。だから私はまた、都市:id, nameとテーブルがあります。関係は1対多であり、ユーザーは都市を1つしか持てません。都市は多くのユーザーのための場所です。データベースの設計:接続

質問はどのように接続するのですか?

a)カラムcity_idをusersテーブルに追加します。

b)3番目の結合表user_city: user_id,city_idを作成する(aの場合にその膨大な数のNULLを省略することを目的に)。

また、アプリケーションはそうcity_id列は任意の非外国人ユーザーが唯一の出生の街を(持っているので、いずれの場合

答えて

2

にインデックスを作成する必要があります

select user.name ... where city_id=xxx 

する必要があることに注意してください。彼がタクシーで生まれない限り)、ユーザーIDで索引付けされた生年月日のテーブルを持つことは愚かで無駄に思われます。大部分の都市フィールドがNULLになっているにもかかわらず、(私が主張しているように)それが所属するユーザテーブルに出産都市を置くことになります。

しかし、私の単なる意見を忘れてしまったのは、古典的な時間対宇宙の問題であり、スペースを考慮すると何百万という無関係な無駄なNULLがあります。余分な時間は何百万という無関係な無駄なSELECTである。

この問題の解決方法は何ですか?

+0

city_id列のインデックスにすべてのNULLを入れるのは無駄だと思うので(100 000 000ユーザーのうち10人しか出身都市を提供していない場合) RAMは限られているので、できるだけインデックスのサイズを最小限に抑えたい。 – Viacheslav

+0

答えがあります:あなたの場合、スペースは時間よりも貴重です。 –