【问题标题】:How do i set up a mysql db structure with variable columns?如何设置具有可变列的 mysql 数据库结构?
【发布时间】:2017-04-20 14:55:32
【问题描述】:

我正在创建一个博客,其中的帖子具有可变数量的文本字段。所以它可能有 1 个或 30 个。问题是我不确定设置数据库的最佳实践是什么。为了解决这个问题,我使用了一对多的关系。

这就是我当前的数据库结构现在的样子:

帖子表:

posts
- id
- title

发布文本表:

post_text
- id
- post_id
- text

还有我的数据透视表:

post_text
- post_id
- post_text_id

这是我能想到的。另一种方法是让 post 表达到文本的最大列数。但这会导致很多空列,因为它们不会全部使用。但是我发现我使用的方法有点过于复杂?

有什么想法吗?

【问题讨论】:

    标签: mysql database data-structures one-to-many


    【解决方案1】:

    您不能在 MySQL 中拥有可变数量的列,因为您必须事先定义架构,以后无法更改。

    如果您不打算使用 MySQL,您可以尝试一些 NoSQL DB,例如 MongoDB,它非常适合您的用例。

    【讨论】:

    • 我明白了,我不熟悉这些数据库结构,但我会检查一下。谢谢
    【解决方案2】:

    如果您的帖子需要多个文本条目是必不可少的,那么一对多关系是解决问题的正确方法。我对您的唯一建议是您的表名可以改进为更具指示性的名称。

    举个例子:

    posts
    post_text_fields
    text_fields_in_post
    

    虽然这种方法可能看起来“过于复杂”,但它实际上是使用 MySQL 建立一对多关系时最简单的解决方案。

    除了 MySQL 之外,还有 @demolisher 之前在其回答中提到的 NoSQL 解决方案,这些解决方案往往面向更可用的表结构,例如 JSON,并且可能更适合需要弱模式的应用程序。在这方面我也会推荐 MongoDB

    【讨论】:

      【解决方案3】:

      MySQL 5.7 支持JSON data type,因此您现在可以将半结构化数据与常规架构一起存储。

      但我不明白你的问题。如果帖子和 post_test 之间存在一对多的关系,则不需要多个文本列,只需为每个帖子存储多个 ,每行一个文本。

      我不知道你的第三张桌子是干什么用的。它与 post_text 同名,您不需要它来处理一对多关系。您可能需要它来处理多对多关系。

      【讨论】:

      • 您的权利。这应该是正确的做法。因为我实际上并不需要数据透视表,所以我过度思考了错误。文本字段是帖子专有的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多