我正在设计一个博客数据库。我希望帖子属于任意数量的类别,包括不属于任何类别(即类别数 = 0、1、2、3 ...)。
我知道设计这样一个数据库的常用方法(例如在 Wordpress 中)是一张表用于帖子,一张表用于类别,一张表用于关系,因此:
table relationships
column relationship id
column post id
column category id
但这意味着要显示一篇文章,我的脚本必须进行至少三个数据库查询。这对我来说似乎很慢。
这就是为什么在另一个博客中,我只有一个帖子表,其中包含一个用于类别的 varchar 列,我在其中插入了一个包含所有类别名称的字符串,我在 PHP 中对其进行了解析,因此
table posts
column post id
... (many other columns)
column categories
其中列类别包含可能如下所示的字符串:
apples,oranges,bananas
我只是用 PHP explode()
ed。
请解释为什么我应该避免第二种方法(一张表,爆炸)。它肯定有什么我错过的错误,因为它在博客软件中不常用。
注意:
可能仍然有一个列出类别的表格,在创建帖子时将新类别写入其中,并从中绘制类别列表以显示它们,例如,侧边栏。
我希望对帖子的查询比对类别帖子的查询多得多,这就是为什么我不太担心在第二个数据库中查询某个类别的帖子,这在第一个数据库中可能更快.
最佳答案
在第二种情况下,您在按某个类别查找帖子时会遇到很大的问题。
例如,你写了一些关于编程语言的文章,想在不同的页面上显示所有关于 python、php、ruby 等的文章……但是你不能写简单快速的数据库请求,因为你违反了 1 个范式在你的第二个数据库方案中。
JimL已经提到了 JOIN
,它允许发出 1 个请求并从带有链接表的标准多对多关系方案中获取所有需要的信息 post2category
关于php - 对于有类别的帖子,什么更快 : Several database calls or additional PHP code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36526311/