我真的在寻找与 SO 设置方式非常相似的东西,可以对几种不同类型的事情进行投票(问题和答案)。通常,我可以使用哪种 DB 模式来支持对许多不同类型的对象进行投票?
我会有一个 Vote 表来引用数据库中的其他对象吗?或者我是否必须或应该为我想投票的每个对象拥有一个单独的投票表。
我真的在寻找与 SO 设置方式非常相似的东西,可以对几种不同类型的事情进行投票(问题和答案)。通常,我可以使用哪种 DB 模式来支持对许多不同类型的对象进行投票?
我会有一个 Vote 表来引用数据库中的其他对象吗?或者我是否必须或应该为我想投票的每个对象拥有一个单独的投票表。
凯尔,
有点难以理解你到底需要什么......但这是我的 2 美分:
我假设您希望在投票时存储每个投票,由谁(可能是 IP 地址或用户名)投票,我会选择一个单一的投票表解决方案。我还假设当你从数据库中查询一个实体(问题、答案等)时,你也想加入这个表,而且不可能只对投票表进行查询。
在这种情况下,您可以在投票表上使用 2 列——一列用于投票的对象类型,另一列用于保存该对象的 id。这样,您可以通过指定对象的类型将投票表连接到任何其他查询。
我认为在一个表中管理您的所有投票将使您的域更简单,然后传播它并为每个实体创建一个投票表。在这个单一投票表解决方案中,您只需要维护实体类型列表(可能使用一个小型字典表)。
还有性能方面的考虑。如果您预计会有数百万张选票,那么该单个表的增长速度将比一组单独的表快得多。这可能是反对它的考虑因素。如果有很多并发读/写,也要注意不要让它成为瓶颈。