将记录链接到多个表记录类型

时间:2012-03-01 23:29:53

标签: sql database

在我的应用程序中,用户可以针对帖子发布评论或回复帖子。这与嵌套注释不同,因为回复是注释的不同表。我想这与StackOverflow的工作方式非常相似。

我对如何链接它感到困惑,因为外键是什么?通常我只是将post_id放在评论表中,但我还需要reply_id将其链接到答案,如果它链接到那个而不是实际的帖子。虽然我想我在那个实例中都需要这两个,所以链接到帖子和该帖子的回复虽然回复本身已经链接了......令人困惑吧?

最好的方法是什么?感谢

POSTS
id
title
content
datetime


REPLIES
id
datetime
content
post_id


COMMENTS
id
datetime
content
post_id
reply_id

2 个答案:

答案 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)

这两种方法都有一些注意事项,主要是如何强制执行参照完整性。

希望这会有所帮助。不完全是第三种正常形式,但它将完成工作。