我想为我的实体实现评论、评级、标签等模块。我的想法是:
评论表 -> 评论 ID、评论文本
entity1 -> entity1_id,entity1_text
entity2 -> entity2_id, entity2_text
entity1_comments -> entity1_id,comment_id
entity2_comments -> entity2_id,comment_id
……
这种方法正确吗?
它比那更简单。你会想要这样的东西:
实体:EntityID EntityText
评论:CommentID AssocEntityID CommentText
其中 AssocEntityID 与 Entity 表的 EntityID 列有外键关系。
对于此解决方案,要获取 ID 为 1 的实体的所有评论,您可以执行以下操作:
SELECT CommentID, CommentText FROM Comments WHERE AssocEntityID = 1
不,我建议只有一个 entity_comments 表,它是评论和实体之间的相交表。您必须将一个评论表中的 entity1 和 entity2 id 作为单独的属性。
所以它看起来像:
entitiy1 -> entity_comments <- comments_table
entitiy2 -> entity_comments <- comments_table
一个简单的选择可能是:
select text
from entity1
, entity_comments
, comments_table
where entity1.id = entity_comments.entity1_id
and entity_comments.comment_id = comments_table.id