我正在创建一个用户可以加入和创建群组的系统。在这些组中,成员可以创建主题并回复已创建的主题,因此我想知道您对以下哪种方法最佳的看法: 创建两个表,groups_posts和group_topics:
--group_topics
id PK
group_id int FK
user_id int FK
title varchar(50)
content varchar(500)
status int
--group_posts
id PK
topic_id int FK
user_id int FK
content varchar(500)
status int
或创建一个唯一的表,group_tposts:
--group_tposts
id PK
group_id int FK
user_id int FK
is_topic boolean
title varchar(50)
content varchar(500)
status int
答案 0 :(得分:10)
根据您的描述,在我看来可能需要更多。也许是类似的东西:
注意:将内容字段添加到Post
。
答案 1 :(得分:1)
这取决于:
合并表格的案例
鉴于布尔值只占用一个字节,组合表不是一个坏主意
但请注意,在is_topic
字段上创建索引不起作用,因为其low cardinality。
MySQL(或任何其他数据库)将拒绝在该字段上使用索引,而是执行表扫描。
单独表格的案例
如果您计划经常使用与主题分开的帖子,我会建议单独的表格
因为选择那些将更快,MySQL不必进行全表扫描以将帖子与主题分开。
答案 2 :(得分:1)
我认为两张桌子更好......
你可以看到如何在维基百科上规范化数据库系统 http://en.wikipedia.org/wiki/Database_normalization