Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;“内容类型”;数据库字段_Php_Mysql_Database_Database Schema - Fatal编程技术网

Php &引用;“内容类型”;数据库字段

Php &引用;“内容类型”;数据库字段,php,mysql,database,database-schema,Php,Mysql,Database,Database Schema,为这个愚蠢的标题感到抱歉,但我不知道如何命名这个问题:) 因此,我试图构建一个非常简单的内容管理系统,将数据存储在数据库中 其中一种数据类型是“内容类型”(类似于WordPress的帖子/自定义帖子类型) 内容类型可以是任何内容:页面、汽车列表、评论、图书产品等 每种内容类型都有自己的字段。例如: 页面的名称为:标题、文本 汽车清单包括:品牌、型号、类型、年份、价格 一本书有:书名、作者、价格 等等 其思想是这些内容类型是动态的(它们的字段也是动态的)。它们将通过CMS的扩展添加。唯一的内置

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

因此,我试图构建一个非常简单的内容管理系统,将数据存储在数据库中

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

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

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

  • 页面的名称为:标题、文本
  • 汽车清单包括:品牌、型号、类型、年份、价格
  • 一本书有:书名、作者、价格
等等

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

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

我应该如何设置表/表字段,以便基于特定内容类型字段搜索结果会非常快


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

有很多不同的选项

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

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


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

我建议Neville K的第一个解决方案需要一个包含4个表的结构
内容

内容属性(名称

内容属性(值)
并加入内容属性(内容id,内容属性id,内容值id)

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

像coach和Mongo这样的非关系型数据库正是在这类任务中大放异彩。