小编典典

关于许多表数据库设计问题的评论

sql

我有桌子:

Articles{...}
Recipes{...}
Notifications{...}
Photos{...}

而且我需要实现“用户评论”功能(例如Facebook)。我应该ArticleComments, RecipesComments以1:n关系制作table:等等吗?还是Comments为所有人创建一张桌子(但我不知道该如何设计)?


阅读 131

收藏
2021-03-23

共1个答案

小编典典

您可以创建另一个表CommentableEntity(尽管称其更好)。表中的每一行(ArticlesRecipes等等)都将引用此表中的唯一行。实体表可能具有type指示实体类型的字段(以帮助反向连接)。

然后,您可以有一个以通用方式Comment引用的表CommentableEntity

因此,例如,您将得到下表:

Articles
-----------------
Article_id
CommentableEntity_id (fk, unique)
Content
....

Recipes
-----------------
Recipe_id
CommentableEntity_id (fk, unique)
Content
....

CommentableEntity
-----------------
CommentableEntity_id (pk)
EntityType (e.g. 'Recipe', 'Article')

Comment
-------
Comment_id (pk)
CommentableEntity_id (fk)
User_id (fk)
DateAdded
Comment 
...etc...

您可以在每次添加文章/食谱等时添加CommentableEntity记录。您所有的注释处理代码都必须知道CommentableEntity_id-它不在乎它是什么类型。

2021-03-23