我正在构建一个评论功能,并且在数据库设计上有点挣扎。目标是在用户决定修改/删除评论时保留所有历史记录。
我想象的列是
`commentID` int(11) NOT NULL,
`referencetype` char(1) NOT NULL,
`referenceID` int(11) NOT NULL,
`revision` tinyint(3) unsigned NOT NULL,
`comment` text NOT NULL,
`userID` int(11) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`timestamp` int(11) NOT NULL,
添加新评论时,我希望commentID增加,并在向同一评论ID添加修订时,我希望修订号增加。
可能的解决方案是
这是一个合理的解决方案吗?什么可能是更好的方式?
编辑:一些重要列的示例数据
+-----------+---------------+-------------+----------+-----------------------+--+
| commentID | referencetype | referenceID | revision | comment | |
+-----------+---------------+-------------+----------+-----------------------+--+
| 1 | A | 123 | 1 | Comment1 | |
| 1 | A | 123 | 2 | Comment1 first edit | |
| 2 | A | 123 | 1 | Comment2 | |
| 1 | A | 123 | 3 | Comment1 second edit | |
+-----------+---------------+-------------+----------+-----------------------+--+
答案 0 :(得分:3)
根据@daker对这个答案的第一个版本的评论,我想改变这个解决方案的重点。
您可以使用时间戳字段作为修订,而不是使用整数修订号。这样做,你可以这样定义你的表:
`commentID` int(11) NOT NULL AUTO_INCREMENT,
`referencetype` char(1) NOT NULL,
`referenceID` int(11) NOT NULL,
`comment` text NOT NULL,
`userID` int(11) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
...
PRIMARY KEY(commentID, timestamp)
然后你会得到这些好处: