2012-08-04 11 views
5

多くのウェブサイトで
に投稿が好き/嫌いであるのは不思議です。
もちろんここでも、stackoverflowで。データベースデザイン:好きなテーブル?

技術的には、それは大きな好きなテーブルですか?

user_id post_id 

USER_ID - ポストはそれが

はすべてに約あることである -
post_idのを投票?
大きな好きなテーブル?
もっと効率的な/洗練されたものはありませんか?

+0

どのような基準で、それは大きなテーブルだと思いますか? –

+0

投稿が好き/嫌いな人の情報を保存する必要がある場合は、保存する必要があるデータの最小量です。 – JJJ

答えて

5

それは最も基本的なレベルです。そうです、それはすべてです。

しかし、それは次のような質問に答えるためにしようとすると、拡大して開始します。この記事のようにユーザーをしたどのくらい

  • を?
  • いつ投稿が好きですか?
  • 投稿をどのように見つけましたか?
  • 投稿にコメントしましたか?
  • どのようにグループ全体/コミュニティ

は、その後、あなたが友人やコミュニティについての深さの質問に多くの答えたいし始めポストのように行います。

1

私はあなたの懸念を理解できると思います。ページを表示する必要があるたびにCOUNT()を発行する必要があります。

あなたは確かにこの基本的なテーブルを持っていなければなりません。これはCOUNT()の基礎となりますが、アクセスごとにCOUNT()する必要はありません。

合計テーブルを作成し、ページが好き嫌いを受け取ったとき、トリガを使用するとき、またはストアドプロシージャを呼び出して時々更新するときに更新します。

私は、それぞれの方法が異なるサイトの性格、すなわちより多くの読書またはより多くの文章に対してより指示されていると言いますが、好き嫌いに関しては何も目に見えません。

+0

なので、実際には 私は好きなポストテーブルを持っているとします。 COUNT()を使用する必要がないように、好き嫌いの数を数えるフィールド「likes_counter」が必要です。右? – socksocket

+0

正しい。ターゲット表を使用して、表に列を追加する方法は、サーバーに余分な表を保存する方法です。ターゲットテーブルの構造を変更することが許可されている場合は、素晴らしい。そうでない場合は、targetTableName、totalLikesの2つの列を含む個別の表を作成します。 私はあなたがデータベースにフルアクセスしたとします。私の考えは、単に異なる設計選択肢に注意を呼びかけることでした。 –

関連する問題