在我的应用程序中,用户可以针对帖子发布评论或回复帖子。这与嵌套注释不同,因为回复是注释的不同表。我想这与StackOverflow的工作方式非常相似。
我对如何链接它感到困惑,因为外键是什么?通常我只是将post_id放在评论表中,但我还需要reply_id将其链接到答案,如果它链接到那个而不是实际的帖子。虽然我想我在那个实例中都需要这两个,所以链接到帖子和该帖子的回复虽然回复本身已经链接了......令人困惑吧?
最好的方法是什么?感谢
POSTS
id
title
content
datetime
REPLIES
id
datetime
content
post_id
COMMENTS
id
datetime
content
post_id
reply_id
答案 0 :(得分:1)
回复ID将是您的帖子表中的外国人,因为您将对一个帖子进行多次回复。如果您的任何帖子将被删除,则需要删除所有相应的回复。所以我会说回复ID应该作为数据库中的外键保留。
1)每个帖子都会有多个回复。 2)每个回复都会有多个评论。
如果从REPLIES表中删除任何回复,则应删除所有相应的注释。所以我建议您使用comment id作为REPLIES表的外键。
POSTS
id
title
content
datetime
REPLIES
id
datetime
content
post_id
REPLYCOMMENTS
id
datetime
content
reply_id
POSTCOMMENTS
id
datetime
content
post_id
我猜这些表和关系应该有用。
答案 1 :(得分:1)
有几种方法可以做到这一点。一种是允许COMMENTS.reply_id为零,或-1,或一些其他代码,表明注释与回复无关(抱歉,我试图不惜一切代价避免使用NULL!)。另一种方法是用两列替换post_id和reply_id列,如下所示:
COMMENTS
id
datetime
content
parent_id (could be post_id or reply_id)
parent_type (could be 'post' or 'reply' or something else)
这两种方法都有一些注意事项,主要是如何强制执行参照完整性。
希望这会有所帮助。不完全是第三种正常形式,但它将完成工作。