【问题标题】:how to represent trees and their content in MySQL?如何在 MySQL 中表示树及其内容?
【发布时间】:2011-03-30 04:49:58
【问题描述】:

我需要能够存储这样的东西:

其中绿色是template 类型,灰色是field container 类型,白色是field。 (也就是说,一个字段有一个标签和一些文本,为了简单起见,都是mediumtext;而一个字段容器可以存储其他字段容器或文本,而一个模板是一个顶级字段。)

现在,假设我希望允许用户创建任意数量的这些结构,但不可能超过 10 个。当然,我们需要能够将数据链接到它。

这一切都是为了能够在数据库中存储一个关联数组,该数组在伪代码中查找上述内容:

my_template = {
  page_info => { description => 'hello!!!' },
  id => 0,
  content => { background_url => '12121.jpg', text => ...
}

当模板发生变化时(例如,我们将keywords 添加到 page_info),如果有一种简单的方法可以使用模板将字段添加到所有数据中,这将是一大优势。

我完全搞不懂,非常感谢!

【问题讨论】:

  • @OMG Ponies,不,因为这不包括如何存储有关它们的信息,只是结构。
  • @AaronYodaiken,你解决了这个问题吗?如何?构建表树结构对我来说总是很容易,但现在我遇到了一个特定且类似的问题。我想在 db 表中保存一些可以定义为 MVC 模式中的 View 对象的结构。例如:t_view('id', 'path_to_file'), t_vars('id', 'var', 'view_id'); - 这些表使用它的变量定义单个视图块。我需要生成多维模板,基于一些View,每个变量也可以View每个变量...等等。一个模板可以通过重新定义一些变量值来扩展另一个模板。

标签: sql mysql database database-design tree


【解决方案1】:

有几种不同的方法可以在 MySQL 中存储分层数据结构(树)。例如,您可以选择:

  • 邻接列表
  • 嵌套集
  • 路径枚举
  • 闭包表

请参阅 Bill Karwin 的 presentation,了解有关每种方法优缺点的更多详细信息。

【讨论】:

  • 感谢这些。我不认识比尔·卡尔文,他的演讲中有一些精彩之处。
猜你喜欢
  • 2018-08-25
  • 2012-08-08
  • 2015-05-23
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
相关资源
最近更新 更多