编辑:标题很宽泛。作为“关系数据库设计的最佳解决方案,用户可以发布内容,并且可用字段会因内容类型而异”会更准确。
我正在开发一个用户可以发布不同类型内容的网站。所有帖子都有文本和与另一个相关的 feed_id 值(一个提要的许多帖子)。基于某些帖子仅包含文本的想法,最佳解决方案是什么?
到目前为止我想到的想法:
- 为每个引用帖子的特殊类型添加一个表格,将未引用的帖子保留为文本帖子。
问题:如何查询纯文本帖子?
- 为每种类型添加一个表格,包括文本帖子。
问题:似乎效率不高。对于在 text_posts 中找到的每个帖子,必须再次在帖子中找到该帖子才能获取文本字段。再说一次,对于像图片这样的特殊类型,情况已经如此。有没有合适的方法来通过 JOIN 完成这个?
- 每个帖子条目中的外键到每个可以为空的特殊类型
问题:大量空字段,应用程序必须维护规则。
- 表示帖子类型的字段
缺点:规则必须由应用程序维护(区分大小写,帖子应该只有一个有效的类型),更难查询亲:这个字段也可以代表相似内容的不同视图(即我可以为 post_type 设置一个名为“blog_entry " 这与文本帖子完全相同,但应用程序显示的内容不同)。不过,这个专业人士有点代码味道......
另外,如果有什么不同,我的应用程序是用 PHP 编写的。
编辑:似乎我的第一个解决方案“为每个引用帖子的特殊类型添加一个表格,将未引用的帖子保留为文本帖子”,如果我这样查询所有帖子,则可以正常工作:
SELECT posts.title, posts.text, picture_posts.id, picture_posts.src FROM posts
LEFT JOIN picture_posts
ON picture_posts.post_id=posts.id
ORDER BY posts.date DESC
然后应用程序的一些伪代码如下所示:
print(posts.title, posts.text);
if (picture_posts.id is not null) {
showPicture(picture_posts.src);
}
我应该使用这个设计吗?