Php &引用;“内容类型”;数据库字段
为这个愚蠢的标题感到抱歉,但我不知道如何命名这个问题:) 因此,我试图构建一个非常简单的内容管理系统,将数据存储在数据库中 其中一种数据类型是“内容类型”(类似于WordPress的帖子/自定义帖子类型) 内容类型可以是任何内容:页面、汽车列表、评论、图书产品等 每种内容类型都有自己的字段。例如:Php &引用;“内容类型”;数据库字段,php,mysql,database,database-schema,Php,Mysql,Database,Database Schema,为这个愚蠢的标题感到抱歉,但我不知道如何命名这个问题:) 因此,我试图构建一个非常简单的内容管理系统,将数据存储在数据库中 其中一种数据类型是“内容类型”(类似于WordPress的帖子/自定义帖子类型) 内容类型可以是任何内容:页面、汽车列表、评论、图书产品等 每种内容类型都有自己的字段。例如: 页面的名称为:标题、文本 汽车清单包括:品牌、型号、类型、年份、价格 一本书有:书名、作者、价格 等等 其思想是这些内容类型是动态的(它们的字段也是动态的)。它们将通过CMS的扩展添加。唯一的内置
- 页面的名称为:标题、文本
- 汽车清单包括:品牌、型号、类型、年份、价格
- 一本书有:书名、作者、价格
WP对字段使用不同的表,并将它们存储为行,ID指向它们所附加到的帖子。但是,当你搜索多个字段时,这是非常慢的…有很多不同的选项 最常见的是在内容项旁边存储“键/值”对(我相信这是WP模型)。该模型存在许多问题-当搜索很快变得不可理解时,布尔逻辑,内容类型不容易在代码中定义和验证(例如,“所有汽车内容类型必须具有属性引擎大小”),等等。但是,它们使创建和更改内容类型变得容易 另一个模型是基于内容类型生成数据库表,通常以“基本”内容项作为根。在Larman的书中有一个关于如何对数据库表建模的很好的讨论(“应用UML和模式”)。这种设计会产生大量的内务管理代码——创建和修改数据库表是一件痛苦的事情,对于需要大量内容类型的解决方案,我不建议这样做
我见过的最健壮的解决方案使用XML存储内容——通常在数据库中。XML允许您定义内容类型(使用DTD或模式),并验证/查询它。它不如SQL快,不过…我建议Neville K的第一个解决方案需要一个包含4个表的结构
内容
,内容属性(名称
,内容属性(值)
并加入内容属性(内容id,内容属性id,内容值id)它的快速搜索查询有点复杂像coach和Mongo这样的非关系型数据库正是在这类任务中大放异彩。