我正在设计一个博客数据库。我希望帖子属于任何数量的类别,包括无(即类别数量=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中简单地CCD_ 1编写的。
请解释为什么我应该避免第二种方法(一个表,爆炸)它一定有什么问题,我很怀念,因为它在博客软件中不常用。
注:
可能仍然有一个列出类别的表,在创建帖子时会在其中写入新的类别,并从中绘制类别列表以在侧边栏中显示它们。
我预计对帖子的查询会比对类别中的帖子的查询多得多,这就是为什么我不太担心在第二个数据库中查询某个类别的帖子,这在第一个数据库中可能会更快。
在第二种情况下,按类别查找帖子会遇到巨大问题。
例如,您编写了关于编程语言的帖子,并希望在单独的页面上显示所有关于python、php、ruby等的帖子。。。但您不能向数据库编写简单快速的请求,因为您违反了第二个数据库方案中的1范式。
JimL已经提到了JOIN
,它允许通过链接表post2category
进行1个请求并从标准多对多关系方案中获得所有需要的信息