用户组表架构

时间:2011-05-30 19:41:34

标签: mysql database-design schema database-schema db-schema

我正在创建一个用户可以加入和创建群组的系统。在这些组中,成员可以创建主题并回复已创建的主题,因此我想知道您对以下哪种方法最佳的看法: 创建两个表,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

3 个答案:

答案 0 :(得分:10)

根据您的描述,在我看来可能需要更多。也许是类似的东西:

  • 一个群组可以有很多用户。
  • 一个用户可以属于多个群组。
  • 在群组内,用户创建主题(主题=主题;主题;感兴趣的类别或一般区域。)
  • 在主题中,用户可以创建新帖子或回复以前的帖子。

enter image description here

注意:将内容字段添加到Post

答案 1 :(得分:1)

这取决于:

合并表格的案例
鉴于布尔值只占用一个字节,组合表不是一个坏主意 但请注意,在is_topic 字段上创建索引不起作用,因为其low cardinality

MySQL(或任何其他数据库)将拒绝在该字段上使用索引,而是执行表扫描。

单独表格的案例
如果您计划经常使用与主题分开的帖子,我会建议单独的表格 因为选择那些将更快,MySQL不必进行全表扫描以将帖子与主题分开。

答案 2 :(得分:1)

我认为两张桌子更好......

你可以看到如何在维基百科上规范化数据库系统 http://en.wikipedia.org/wiki/Database_normalization