mysql-一个表与多个表
作者:互联网
我有以下表格:
-帖子
-文件
-事件
-文件
每个帖子,文件,事件,文档都可以有评论.
有什么更好的数据库方案,为什么?
第一个解决方案
>评论表(comment_id,author_id,评论)
> 4个表来创建关系(posts_comments(post_id,comment_id),files_comments(file_id,comment_id),events_comments(event_id,comment_id),documents_comments(document_id,comment_id))
第二解决方案
>评论表(comment_id,author_id,评论)
> items_comments(comment_id,parent_type(枚举[‘post’,’file’,’event’,’document’]),parent_id)
对此有什么更好的解决方案,还是应该使用以下两种方法之一?
解决方法:
想要/需要一个注释表可能是真正的原因.例如,它可以更轻松地查看给定用户的所有评论.同样,通过所有注释进行搜索将更加简单(将一个FTS索引放在一张表上就可以完成了).
另一方面,如果没有充分的理由将评论保留在一个表中,则可能存在第三个(而且很明显)的解决方案.
为每个项目(发布,事件,文件,文档)创建一个单独的注释表.在这种情况下,RI关系的定义和描述非常简单.另外,如果您经常键入即席查询,则可以使其更简单.例如
select * from documents d left join doc_comments c
on d.id = c.docid
where d.id=42;
这些都可能与您的情况无关或无关紧要,但值得考虑.
另一种随机的想法:OP中的两个解决方案都有“感觉”,它们正在定义多对多关系(例如,评论可以属于多个项目).假设这不是理想的情况,则可以通过使用适当的唯一索引来防止它,但是…仍然具有初始外观,似乎似乎可能导致混淆.
标签:database-design,conventions,database-schema,mysql 来源: https://codeday.me/bug/20191101/1982799.html