2

私は、いくつかの異なる種類のもの(質問と回答)に投票できるSOのセットアップ方法と非常によく似たものを本当に探しています。一般に、さまざまな種類のオブジェクトに対する投票をサポートするには、どのような種類の DB スキーマを使用できますか?

データベース内の他のオブジェクトへの参照を持つ単一の Vote テーブルを使用できますか? それとも、投票したいオブジェクトごとに個別の投票テーブルを用意する必要がありますか?

4

1 に答える 1

2

カイル、

正確に何が必要かを理解するのは少し難しいです...しかし、ここに私の2セントがあります:

投票が行われたときに各投票を保存する必要があると仮定すると、誰によって (おそらく IP アドレスまたはユーザー名)、私は単一の投票テーブル ソリューションを使用します。また、DB からエンティティ (質問、回答など) にクエリを実行するときに、このテーブルにも参加する必要があり、投票テーブルだけにクエリを実行する可能性は低いと思います。

この場合、投票テーブルで 2 つの列を使用できます。1 つは投票されたオブジェクトのタイプ用で、もう 1 つはそのオブジェクトの ID を保持するためです。そうすれば、オブジェクトのタイプを指定することで、投票テーブルを他のクエリに結合できます。

単一のテーブルですべての投票を管理すると、ドメインが単純になり、ドメインを広げて各エンティティの投票テーブルを作成できると思います。この単一の投票テーブル ソリューションでは、エンティティの種類のリストを維持するだけで済みます (おそらく小さな辞書テーブルを使用します)。

パフォーマンスの考慮もあります。数百万の投票が予想される場合、その単一のテーブルは、一連の個別のテーブルよりもはるかに急速に拡大します。それはそれに対する考慮事項かもしれません。また、同時読み取り/書き込みが多数ある場合は、ボトルネックにならないように注意してください。

于 2010-04-06T12:31:45.413 に答える