4

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

3 回答 3

10

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

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

在此处输入图像描述

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

于 2011-05-30T21:26:00.323 回答
1

这真的取决于:

组合表
的情况 鉴于布尔值只占用一个字节,组合表不是一个坏主意。
但是请注意,由于其基数低,在该字段上创建索引is_topic 将不起作用

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

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

于 2011-05-30T19:51:51.880 回答
1

我觉得两张桌子更好...

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

于 2011-05-30T19:51:58.743 回答