私は、いくつかの異なる種類のもの(質問と回答)に投票できるSOのセットアップ方法と非常によく似たものを本当に探しています。一般に、さまざまな種類のオブジェクトに対する投票をサポートするには、どのような種類の DB スキーマを使用できますか?
データベース内の他のオブジェクトへの参照を持つ単一の Vote テーブルを使用できますか? それとも、投票したいオブジェクトごとに個別の投票テーブルを用意する必要がありますか?
私は、いくつかの異なる種類のもの(質問と回答)に投票できるSOのセットアップ方法と非常によく似たものを本当に探しています。一般に、さまざまな種類のオブジェクトに対する投票をサポートするには、どのような種類の DB スキーマを使用できますか?
データベース内の他のオブジェクトへの参照を持つ単一の Vote テーブルを使用できますか? それとも、投票したいオブジェクトごとに個別の投票テーブルを用意する必要がありますか?
カイル、
正確に何が必要かを理解するのは少し難しいです...しかし、ここに私の2セントがあります:
投票が行われたときに各投票を保存する必要があると仮定すると、誰によって (おそらく IP アドレスまたはユーザー名)、私は単一の投票テーブル ソリューションを使用します。また、DB からエンティティ (質問、回答など) にクエリを実行するときに、このテーブルにも参加する必要があり、投票テーブルだけにクエリを実行する可能性は低いと思います。
この場合、投票テーブルで 2 つの列を使用できます。1 つは投票されたオブジェクトのタイプ用で、もう 1 つはそのオブジェクトの ID を保持するためです。そうすれば、オブジェクトのタイプを指定することで、投票テーブルを他のクエリに結合できます。
単一のテーブルですべての投票を管理すると、ドメインが単純になり、ドメインを広げて各エンティティの投票テーブルを作成できると思います。この単一の投票テーブル ソリューションでは、エンティティの種類のリストを維持するだけで済みます (おそらく小さな辞書テーブルを使用します)。
パフォーマンスの考慮もあります。数百万の投票が予想される場合、その単一のテーブルは、一連の個別のテーブルよりもはるかに急速に拡大します。それはそれに対する考慮事項かもしれません。また、同時読み取り/書き込みが多数ある場合は、ボトルネックにならないように注意してください。