MySQL数据库设计。新索引 ID

标签 mysql sql database-design

我有一个应用程序,其中有已发布的内容和正在审核的内容。我将它们保存在单独的表中。

这两个内容都可以投票和评论,当正在审核的内容发布时,我将其插入到已发布的表中,但是投票和评论不会保存,因为它们都分开在不同的表中。

表:已发布、已发布_投票、已发布_评论、正在审核、正在审核_投票、已审核_评论

我想保留投票和评论,问题是新帖子必须有一个新的自动增量ID,因为我显示按ID排序的内容,否则如果我按时间戳排序出版物,则会使文件排序这不是一个选择。

因此,我将连接所有表,并且只有 3 个表,当内容发布时,我可以在表上进行新插入或更新 id,我认为这更糟糕。但是问题是我必须将所有投票和评论更新到新发布的id,在某些情况下可能会有数千票,并且必须在此时进行更新,我想我可以异步完成并延迟发布。但我也不认为这是一个很好的解决方案。

有什么想法吗?

PD:理想情况下,我想要的是将新出版物放在表或索引的末尾而不更改 id,并且当我选择出版物时,无论它们在表或索引上的物理位置从底部开始对它们进行排序数字索引值,但据我所知显然这是不可能的。

最佳答案

将未发布的内容保留在单独的表中的原因是什么?

您可以将所有内容放在同一个表中,并将相应的投票和评论放在子表中。根据“类型”或“状态”列(已发布/正在审阅)区分内容。

Content(Id, Title, Text, Status, ...)
Votes(Id, ContentId, ...)
Comments(Id, ContentId, ...)

新插入内容时,其状态为“正在审阅”。然后可以通过将“状态”更改为“已发布”来发布内容。此外,您可以保留时间戳以在内容状态更改为“已发布”时保存。

这需要对系统进行设计级别的更改,但越早越好。

关于MySQL数据库设计。新索引 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42065218/

相关文章:

sql - SQLite名称列与预期不同

mysql - INNER JOIN 但不编辑行

database-design - 为了避免一些复杂的查询而重复数据库中的字段是不好的设计实践吗?

database - 应用范围关系的用户或用户配置文件模型

php函数不向数据库表添加列

php - 如何在 PDO 函数中使用 CURDATE() 进行多次插入

mysql - 如何计算给定状态的列状态总时间

php - 将多个数组插入不同的行

mysql - 如何在 MySQL 中通过分组连接两个表?

sql - Rails - 多个模型之间的公共(public)字段/报告数据 - STI、hstore 或拆分表?