【问题标题】:Database structure and associations for open-ended data and data types开放式数据和数据类型的数据库结构和关联
【发布时间】:2012-08-11 02:00:09
【问题描述】:

我正在尝试构建一个自定义 CMS 工具(是的,我知道 - 另一个 CMS),用户可以在其中创建任意数量的嵌套“节点”。

“节点”示例:餐厅、人、鞋子、大陆......任何东西。在每个节点内,可以有任意多个子节点,依此类推。

在浏览 Wordpress、Drupal... 等时,我不断看到诸如“分类”和“术语”之类的表格。

这似乎是一件“正常”的事情,但我无法理解应该如何完成或他们是如何做到的。我假设这些表与整体结构和表关系有关,但是......在线搜索无法解释实际发生的情况或我将如何最好地为这种结构设计我的数据库。


到目前为止我的想法(显然没有被淘汰或者我不会在这里问):

1) 存储已知数据类型和bindModel(): 创建像 data_locationsdata_texts 这样的表,它们将具有各自的数据字段。所以 - 在data_locations 表中,我会有citylongitudeaddress。在 data_texts 表中,我有titlesubtitlecontentauthor

然后,每次他们创建一个新的“节点”时,他们可以选择它应该有什么样的数据类型,我会使用bindModel() 来创建关联(我猜?)。

这不会那么灵活,但可能更易于管理,并且可以更快地在...等上运行查询?不知道。

2) 具有单个“数据”表的每个节点的自定义字段:有一个 data 表和一个 fields 表...每个节点将有许多 fields - 每个都有类型和 maxLength ...等。然后,在管理员中,我会列出这些字段,并且每个数据块titleshoe_size...等在data 表中都会有一行与节点和字段相关。

这个看起来更像是我认为的“分类法”——但同样,我真的不知道。

【问题讨论】:

标签: database cakephp database-design content-management-system


【解决方案1】:

您正在考虑使用哪个数据库?在我看来,图形数据库往往更适合这种事情。

在关系数据库中,这很棘手。任意深度的嵌套查询不自然(但可行),动态模式也不自然(通过谷歌查看“EAV 模式”以查看相关论点)并且很难很好地查询。

看看neo4j。我认为您可以直接自然地表达您的要求。

【讨论】:

猜你喜欢
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2016-02-23
  • 1970-01-01
  • 2020-08-05
  • 2011-06-05
相关资源
最近更新 更多