• ベストアンサー

テーブルの使い方について。

例えばミクシーのマイミクのようなデータは、どのようにデータベースに格納されているのでしょうか?? 以下の2つのパターンのいずれかだと思うのですが。。 パターン(1) マイミクのデータ専用のテーブルがある。 テーブル名 mymixi_t |-----------------| |USER_ID|MIMIXI_ID| |-----------------| |3   |6    | |-----------------| |512  |55    | |-----------------| |66   |6    | |-----------------| |3   |124   | |-----------------| パターン(2) ユーザープロフィールデータのテーブルの中にマイミクのカラムがある。 テーブル名 user_profile_t |-----------------| |USER_ID|USER_NAME|・・・|MYMIXI_ID| |-----------------|・・・|---------| |3   |A太   |・・・|86;48  | |-----------------|・・・|---------| |64   |B太   |・・・|32;45;678| |-----------------|・・・|---------| |1234  |C太   |・・・|8    | |-----------------|・・・|---------| |335  |D太   |・・・|11;14  | |-----------------|・・・|---------| 以上の2パターンのうち、どちらでしょうか?? また、MIXIではデータの量が膨大なため、同じ種類のデータが入るテーブルでも何個かにテーブルを分けている、とも聞いたのですが、これから人を集めようとするサイトならば、あまり気にせず、延々と縦長にデータを追加していって大丈夫なのでしょうか。どこらへんまでのデータ量なら、検索速度的に許容範囲なのでしょうか。 よろしくお願いします。 (仕様のせいか、テーブルの図がこれ以上見やすく書けませんでした。。)

質問者が選んだベストアンサー

  • ベストアンサー
  • 0KG00
  • ベストアンサー率36% (334/913)
回答No.1

データを正規化するということは繰り返し項目をカラムを分けずに記述しますので、前者の方かと思います。検索もしやすいですし。 ただし、正規化をしすぎると性能面(検索時間)で劣る事になりますので多少は正規化を戻す事(後者のようなパターン)もあります。まあ、性能面を求められているケースでもないので前者でしょうね。

miraikako
質問者

お礼

回答ありがとうございます。 なるほど・・やはりどんどん縦長にすると検索時間に支障が出ることにはなるのですね。非常に参考になりました。ありがとうございした。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

後者の形式は、一つのフィールドに複数のIDを 書くというイミでしょうか? これはSQLのイミがないような書式です。 まっとうな設計者ならそんな書き方はしません。 MYMIXI_IDをプライマリキーとしたUSER_IDの整合表 テーブルをつけるのが妥当でしょう。 1テーブルで複数のフィールドを持つことは ままあることですのでそれは効率次第ですね。 もちろんMIXIで具体的にどうしているかは関係者 以外はわかりませんが。

miraikako
質問者

補足

回答ありがとうございます。 >一つのフィールドに複数のIDを書くというイミでしょうか? そういうことです。やはりそうはしない方が多いのでしょうか。 マイミクの件に関するお二人の回答はとても参考になったのですが、今度は、ミクシーの「日記のコメント」のデータはどのように格納されているのかが気になりだしてしまいました。例えば、nikkicomment_id12_t、nikkicomment_id45_t のように、ユーザーごとにテーブルを分けたりしているでしょうか??それとも、一つのテーブルで事足りるのでしょうか。このコメントのデータを一つのテーブルで格納するとなると、相当データが多くなってしまう気がするのですが。。どちらなのでしょう。ご教授よろしくお願いします。

関連するQ&A