【问题标题】:How to organize and manage 'nested' tables within a database?如何组织和管理数据库中的“嵌套”表?
【发布时间】:2014-05-13 04:07:37
【问题描述】:

我刚刚开始探索 SQL 数据库,但我遇到了如何在现有表中存储“复合”结构的问题(如果这甚至是正确的方法)。例如,假设我有一个包含 users 行的数据库表,其中每个用户都有一个 唯一 ID、一个散列 密码、一个电子邮件地址电话号码

足够简单。但是,然后我想允许每个用户创建和存储一个帖子数组。每篇文章都会有一个post idcontentdate和各种其他元数据。如果这是 C++,我可能会有一个 Posts 的数组/向量作为 User 类的成员,然后我会在某处存储一个 User 对象的数组/向量。是否可以在 SQL 中将表存储在表中,以便每个用户都可以访问自己的帖子表?

或者,最好使用一些通用元素(如用户 ID 或用户名)创建两个单独的表(一个 users 表和一个 posts 表) ) 从帖子表中检索特定于用户的数据,反之亦然?

我正在尝试了解如何实现一个复杂的数据库,该数据库可能能够管理大量用户,其中包含特定于用户的数据集,如帖子、消息等。那么,什么可能是一个好的方法继续前进?

【问题讨论】:

    标签: php mysql sql database web


    【解决方案1】:

    正如您已经提到的,在关系数据模型中,您可以定义两个表,如下所示:

    表 1:用户

    user_id      user_name
    -----------  ------------------
    1            'Tom'
    2            'John'
    

    表 2:帖子

    post_id    user_id       content                post_date          
    --------   ----------    -------------------    ---------------------
    1          1             'Hello, I am Tom.'     2014-04-02 14:14
    2          1             'good bye'             2014-04-02 20:10
    3          2             'I am John'            2014-04-02 22:22
    

    您可以在此处阅读介绍性文章:

    关系模型: http://en.wikipedia.org/wiki/Relational_model

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您不会在表中存储表。您可以将数据存储在多个表中,并为一个表分配主键,为另一张表分配外键。
      阅读主键、外键关系模型。
      清除这些概念后,请阅读数据库规范化

      【讨论】:

        【解决方案3】:

        您不会在表中存储表。正如您的第三段所建议的那样,策略是使用一些通用键将表行相互“关联”。

        您描述的“唯一 ID”通常称为“主键”。您可能有一个用户表,其主键会在您每次添加记录时自动递增。您可以使用一个函数,以便在插入后,您可以确定您刚刚添加的记录的主键是什么,以便您可以将记录添加到引用 users 表的主键的其他表中。

        您可能应该阅读有关Database normalizationrelational model 的内容,特别是有关Normal Forms 之间的差异。

        关于选择将帖子与用户关联的字段,我建议您不要使用用户名,而是使用一些用户看不到的内部参考。虽然您的应用程序现在可能不允许这样做,但如果您想为用户提供更改其用户名的机会,将内部数据库结构与基于用户输入的某些东西联系起来只会在将来造成问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-19
          • 1970-01-01
          • 2019-11-26
          • 1970-01-01
          • 1970-01-01
          • 2011-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多