“内容类型”数据库字段

时间:2011-07-26 14:20:53

标签: php mysql database database-schema

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

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

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

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

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

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

依旧......

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

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

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

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

2 个答案:

答案 0 :(得分:1)

有许多不同的选择。

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

另一种模型是基于内容类型生成数据库表,通常以“基础”内容项作为根。在Larman关于如何建模数据库表的书中有一个很好的讨论(“应用UML和模式”)。这种设计会产生大量的内务代码 - 创建和修改数据库表很麻烦,我不建议在需要大量内容类型的解决方案中执行此操作。

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

答案 1 :(得分:1)

id建议Neville K的第一个解决方案需要一个有4个桌子的结构。
contentscontent_properties_namecontent_properties_values并加入contents_properties (content_id , content_property_id , content_value_id )
其快速,搜索查询有点复杂