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