我会去的第一个选项的轻微变种:
数据库表中的专用投票,其中有用户ID和他们的票...存储他们的投票作为一个布尔值,然后计算出“总和”MySQL中的选票。
用整数替换布尔值:+1表示加1,-1表示减号。
然后,而不是一遍又一遍地计算总和,保持一个运行总量的地方;每次进行加权投票时,每加入一票就加1,减1。您可以在数据库中使用插入触发器来执行此操作,或者在添加新投票时向数据库发送额外的UPDATE thing SET vote_total = vote_total + this_vote
。
您可能还希望在投票跟踪表中的thing/userid对上有一个唯一的约束。
跟踪个人投票可以让人们不用投票两次。保持运行总量使总显示快速简单(大概这将是最常见的操作)。
添加一个简单的健全检查器,你可以运行,以确保总数匹配投票将是一个很好的补充。
序列化阵列:请不要那样做,这样的事情让周围的数据库,由专人检查并修复的东西根本是很困难的,序列化的数据结构也变得非常困难(不可能在某些情况下),以用外键正确地限制你的数据,检查约束条件,唯一约束条件和你有什么。将序列化的数据结构存储在数据库中通常是一个坏主意,除非数据库不需要知道有关数据的任何信息,除了如何将数据返还给您。将数组打包到文本列中是数据库中破损和不一致数据的秘诀:破损的代码易于修复,破损的数据通常是永久的。
我只能补充一点,你可能使用cookies为哪些项目用户已经投票,这样你就不需要执行缓存每个页面上的数据库查询渲染,其中用户将在屏幕上看到一个项目。如果你使用这种方法,你需要检查用户是否在注册他们的投票前进行了投票,但是(无论如何,这可能是个好主意)。 – Finbarr 2011-04-02 23:05:21