【问题标题】:"Content type" database fields“内容类型”数据库字段
【发布时间】:2011-07-26 14:20:52
【问题描述】:

对不起这个愚蠢的标题,但我不知道如何命名这个问题:)

所以我正在尝试构建一个非常简单的内容管理系统,将数据存储在数据库中。

其中一种数据类型是“内容类型”(类似于 WordPress 的帖子/自定义帖子类型)。

内容类型可以是任何类型:页面、汽车列表、评论、图书产品等。

每种内容类型都有自己的字段。例如:

  • 页面具有:标题、文本。
  • 汽车列表包含:品牌、型号、类型、年份、价格...
  • 一本书有:标题、作者、价格

等等……

我们的想法是这些内容类型是动态的(它们的字段也是如此)。它们将通过 CMS 的扩展添加。唯一的内置内容类型是页面。

无论如何,我需要有关如何为他们设置数据库表的建议。这应该从主 CMS 中完成,而不是从应该很容易使用 CMS API 编写的扩展中完成。

我应该如何设置表格/表格字段,以便根据某些内容类型字段搜索结果会非常快?

WP 对字段使用不同的表,并将它们存储为具有指向它们所附加的帖子的 ID 的行。但是当您搜索多个字段时,这会很慢......

【问题讨论】:

  • Couch 和 Mongo 等非关系型数据库真正在这类任务上大放异彩。

标签: php mysql database database-schema


【解决方案1】:

有很多不同的选择。

最常见的是在内容项旁边存储“键/值”对(我相信这是 WP 模型)。这个模型有很多问题 - 快速搜索时的布尔逻辑变得难以理解,内容类型不容易在代码中定义和验证(例如“所有 CAR 内容类型必须具有属性引擎大小”)等。但是,它们确实使创建和更改内容类型很容易。

另一种模型是根据内容类型生成数据库表,通常以“基础”内容项为根。 Larman 的书中对如何为数据库表建模(“应用 UML 和模式”)进行了很好的讨论。这种设计创建了大量的内务管理代码——创建和修改数据库表很痛苦,对于需要大量内容类型的解决方案,我不建议这样做。

我见过的最强大的解决方案使用 XML 来存储内容 - 通常在数据库中。 XML 允许您定义内容类型(使用 DTD 或模式)并验证/查询它。不过它不如 SQL 快...

【讨论】:

    【解决方案2】:

    id 建议 Neville K 的第一个解决方案,它需要一个包含 4 个表的结构。
    contents ,
    content_properties_name ,
    content_properties_values 并加入contents_properties (content_id , content_property_id , content_value_id )

    它的速度很快,搜索查询有点复杂

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 2012-07-04
      • 2017-02-24
      • 2016-11-19
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多