Mysql 用户组表模式

Mysql 用户组表模式,mysql,database-design,schema,database-schema,db-schema,Mysql,Database Design,Schema,Database Schema,Db Schema,我正在创建一个用户可以加入并创建组的系统。在这些小组中,成员可以创建主题并对已经创建的主题作出响应,因此我想知道您对以下哪种方法最好的看法: 创建两个表、组文章和组主题: --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 va

我正在创建一个用户可以加入并创建组的系统。在这些小组中,成员可以创建主题并对已经创建的主题作出响应,因此我想知道您对以下哪种方法最好的看法: 创建两个表、组文章和组主题:

--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
或创建一个唯一的表,组\u tposts:

--group_tposts
id PK
group_id int FK
user_id int FK
is_topic boolean
title varchar(50)
content varchar(500)
status int
这取决于:

组合表的案例
考虑到布尔值只需要一个字节,组合表不是一个坏主意。
但是,请注意,在字段
上创建索引是主题
将不起作用,因为它的复杂性

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

单独表格的案例

如果您计划经常使用与主题分开的帖子,我建议使用单独的表格。

因为这些选项的选择速度更快,MySQL不必进行完整的表扫描来将帖子与主题分开。

我认为两个表更好

您可以在维基百科上看到如何规范化数据库系统

根据您的描述,在我看来可能还需要一点。也许是这样的:

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


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

以防性能问题,使用两个表似乎会带来一些(更大的?)影响,但组织要好得多。在myspace和facebook等社交网络中,您认为会有单独的表格吗?我建议您为用户和群组创建一个表格。然后有一个标志“IsGroup/IsUser”。这样,你也可以将一个组放到一个组中,并对一个单独的用户设置权限。“如果你计划经常使用与主题分开的帖子”,我无法想象这样的场景,会是怎样的?