med*_*iev 2 mysql sql database-design data-modeling database-schema
如果现在重要的是我正在使用MySQL/MyISAM,但我愿意使用PostgreSQL.我也愿意使用memcached.
考虑一个用于存储论坛帖子的表格:
id forum_name post_date
1 Hey! 2009-01-01 12:00:00
Run Code Online (Sandbox Code Playgroud)
我是不是该..
创建一个单独的表,如
id thread_id views
1 1 532
Run Code Online (Sandbox Code Playgroud)
或者将它保存为初始线程表中的列?
id forum_name post_date views
1 Hey! 2009-01-01 12:00:00 532
Run Code Online (Sandbox Code Playgroud)
另一个相关的小窍门,显示和增加页面浏览量的实用解决方案是什么?我读了这个帖子,似乎我只能缓存一段时间的值,我对增量部分并不十分清楚 - 也许就像将值存储在某个地方的平面文件中,然后定期用cronjobs更新数据库论坛视图每小时左右?
编辑: 澄清一下,投票就像SO一样,每个帖子一票,并且可以有逆转.没关系我对柜台的意思.
我建议除了线程表之外还定义两个表 - VOTE_CODES和THREAD_VOTES.一目了然,它可能看起来过于标准化,但格式将允许您更改投票值而无需进行主要的DML更改.
VOTE_CODES 表vote_code,主键,IE:向上,向下vote_cast_value - 值归因于上/下投票vote_caster_value --optional,如果你想保持SO的负面投票风格影响施法者.THREAD_VOTES 表thread_iduser_idvote_code所有列THREAD_VOTES都是主键 - 这将确保给定用户和线程只有与投票代码一样多的行.假设只有两个代码,这将支持反转投票的能力,因为只能有两个记录 - 一个带有任一代码.
我建议存储:
以上所有都是主键.您的表格将快速填充,但它将使您能够在视图中创建计算列以获得更准确的报告.