【问题标题】:Users group table schema用户组表架构
【发布时间】:2011-09-05 00:41:56
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 在性能方面,使用两张表似乎会带来一点(更大?)的影响,但组织上要好得多。在 myspace 和 facebook 等社交网络中,您认为会是单独的表格吗?
    • 我建议您为用户和组创建一个表。然后你有一个标志“IsGroup/IsUser”。这样,您也可以将组放入组中,也可以为单个用户设置权限。
    【解决方案2】:

    这真的取决于:

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

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

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

    【讨论】:

    • “如果你打算经常使用与主题分开的帖子”,我无法想象这样的场景,会怎样?
    【解决方案3】:

    我觉得两张表比较好……

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

    【讨论】:

      猜你喜欢
      • 2020-11-28
      • 2011-08-30
      • 2016-02-11
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      相关资源
      最近更新 更多