数据库设计 - 一个表中的列引用两个表

时间:2010-10-08 02:17:05

标签: database database-design foreign-key-relationship

这是我的一个例子(采用Stack Overflow)。我有2个表,QuestionsAnswers。我还有一个Comments表。评论表将引用问题和答案。

我应该如何设置数据库?在Comments,QuestionId和AnswerId中有2列。有一个问题和答案的表?介于两者之间,以某种方式告诉我问题或答案?

编辑:找到SO数据资源管理器,它使用一个表来解决问题和答案...我只是不喜欢其中有这么多NULLS的POSTS表。这有没有任何负面影响,比如性能?

3 个答案:

答案 0 :(得分:2)

StackOverflow将问题和答案建模为同一个实体:POSTS。它们具有相同的属性,除了指示接受/授予的答案。

评论获得自己的表格,并使用外键与post_id的相应帖子相关联。

无需加载每月SO转储you can view (and query) the SO schema via the StackExchange Data Explorer

答案 1 :(得分:2)

创建另一个关系Post_Type,以跟踪Comments表中的ID是问题还是答案。

post_type varchar(20) NOT NULL,
post_type_id tinyint PRIMARY KEY,

然后在Comments表中,添加Post_Type.post_type_id作为外键,以及跟踪您的问题ID /答案ID的属性。

Comments表中不需要两列(QuestionId + AnswerId),因为这会在您的方案问题域中的任一列中为您提供null

干杯。

答案 2 :(得分:1)

你的意思是你可以对问题和答案发表评论吗?你将有5个表:

question
answer
comment
question_comment
answer_comment

question_comment将包含comment_idquestion_id。类似于answer_comment