很抱歉这个愚蠢的标题,但我不知道如何命名这个问题:)
所以我正在尝试构建一个非常简单的内容管理系统,将数据存储在数据库中。
其中一种数据类型是“内容类型”(类似于WordPress的帖子/自定义帖子类型)。
内容类型可以是任何内容:页面,汽车列表,评论,书籍产品等。
每种内容类型都有自己的字段。例如:
依旧......
这个想法是这些内容类型是动态的(他们的字段也是如此)。它们将通过CMS的扩展添加。唯一的内置内容类型是页面。
无论如何,我需要有关如何为它们设置数据库表的建议。这应该从主CMS完成,而不是使用CMS API非常容易编写的扩展。
我应该如何设置表/表字段,以便根据某些内容类型字段搜索结果会非常快?
WP为字段使用不同的表,并将它们存储为具有指向它们所附加的帖子的ID的行。但是,当您搜索多个字段时,这非常慢......
答案 0 :(得分:1)
有许多不同的选择。
最常见的是存储“键/值”对(我相信这是WP模型),以及内容项。这个模型存在许多问题 - 当快速搜索时布尔逻辑变得难以理解,内容类型不容易在代码中定义和验证(例如“所有CAR内容类型必须具有属性引擎大小”)等等。但是,它们确实存在它很容易创建和更改内容类型。
另一种模型是基于内容类型生成数据库表,通常以“基础”内容项作为根。在Larman关于如何建模数据库表的书中有一个很好的讨论(“应用UML和模式”)。这种设计会产生大量的内务代码 - 创建和修改数据库表很麻烦,我不建议在需要大量内容类型的解决方案中执行此操作。
我见过的最强大的解决方案使用XML来存储内容 - 通常在数据库中。 XML允许您定义内容类型(使用DTD或模式),并验证/查询它。它没有SQL快,但是......
答案 1 :(得分:1)
id建议Neville K的第一个解决方案需要一个有4个桌子的结构。
contents
,content_properties_name
,content_properties_values
并加入contents_properties (content_id , content_property_id , content_value_id )
。
其快速,搜索查询有点复杂