我有以下表格: - 帖子 - 文件 - 活动 - 文件
每个帖子,文件,事件,文档都可以有评论。
对此更好的数据库方案是什么,以及为什么?
第一个解决方案
第二个解决方案
对此有什么更好的解决方案,或者我应该使用哪一个?
答案 0 :(得分:2)
可能有理由需要/需要单个评论表。例如,它可以使查看给定用户的所有注释变得更加简单。此外,搜索所有注释会更简单(在一个表上放置一个FTS索引,您就完成了)。
另一方面,如果没有令人信服的理由将评论保存在单个表中,则可能存在第三种(而且相当明显的)解决方案。
为每个项目(帖子,事件,文件,文档)创建单独的注释表。在这种情况下,RI关系的定义和描述非常简单。此外,如果您经常键入即席查询,则可以使其更简单。例如
select * from documents d left join doc_comments c
on d.id = c.docid
where d.id=42;
这些对您的情况可能都不重要或重要,但值得考虑。
另外一个随机的想法:OP中的两个解决方案都“感觉”他们正在定义多对多关系(例如,评论可以属于多个项目)。假设这不是理想的情况,可以使用适当的唯一索引来阻止它......但是......它仍然具有初始外观,这似乎可能导致混淆。
答案 1 :(得分:1)
我更喜欢第一种解决方案。 Sql-Statements在那里更简单。在我看来,它更符合数据库规范化
答案 2 :(得分:1)
为了完整起见,我应该提一下另一种可能性 - 继承(又称泛化或(子)类别层次结构):