我正在构建一个具有多种帖子类型的博客引擎,例如:文本,图片,链接,引用。
我看到它的方式,我有两个选择:
选项1:包含所有列的单个帖子表,其中一些不可避免地为NULL
Post table
==========
* post_id
* created_at
* updated_at
* user_id
* post_type
* text
* image_url
* link_url
* quote_source
选项2:每种帖子类型的单独表格
Post table
==========
* post_id
* created_at
* updated_at
* user_id
* post_type
Text table
==========
* post_id
* text
Image table
===========
* post_id
* image_url
我想你得到了暗示。每种方法的优缺点是什么?
有谁知道Tumblr的作用? (从他们的API文档中不清楚。)
答案 0 :(得分:3)
避免对类似实体使用多个表(在本例中为“Posts”)。我不知道Tumblr本身是如何做到的,但它很可能与你的第一篇文章更相似,每行中有一些字段为NULL,而它们的可执行代码会评估post_type值以确定如何处理它。
当您从多个表中提取数据以处理“一个”请求时,多个表很快就会变成一场噩梦。例如,如果你想在上周选择所有类型的所有帖子,你必须从每个表中选择SELECT并合并结果(在某种SQL临时表中,或者在脚本中以编程方式/可执行代码)。这只是一个简单的事情。想象一下搜索等等。
同样,我不知道Tumblr是如何做到的,也不是他们的“正确”方式 - 但有效的方式是一张桌子。