我的数据库表中是否应该有主键?
我们来看看这个标签.您可以在任何版本中看到该标签,它可能位于具有postID和修订版本号的tag_rev表中.我需要一个PK吗?
还因为它是在一个rev表,而不是当前使用的标签应该是一个标记ID的一个blob,而不是多个post_id tagid对的多个条目?
解决方法
您应该努力在您可能想要访问(或更新或删除)该密钥的个别记录的任何非平凡表中拥有主键.主键可以由多个列组成,正式地说,将是最短的可用超级键;也就是说,最短的可用组列,它们一起唯一地标识任何行.
我不知道Stack Overflow数据库模式是什么样的(从Jeff的博客中我读过的一些内容,我不想),但是在你描述的情况下,完全可能有一个密码跨标题,修订号和标签值;当然,这将是最短的(而且只有)超级可用.
关于你的第二点,虽然在归档表中有争议地聚合值可能是合理的,但是它违反了表中每行/列交点应该包含一个单一值的原则.虽然它可能会略微简化开发,但是没有理由不能使用版本化元数据的标准化表,即使是像标签那样微不足道的东西.