这是我的一个例子(采用Stack Overflow)。我有2个表,Questions
和Answers
。我还有一个Comments
表。评论表将引用问题和答案。
我应该如何设置数据库?在Comments,QuestionId和AnswerId中有2列。有一个问题和答案的表?介于两者之间,以某种方式告诉我问题或答案?
编辑:找到SO数据资源管理器,它使用一个表来解决问题和答案...我只是不喜欢其中有这么多NULLS的POSTS
表。这有没有任何负面影响,比如性能?
答案 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_id
和question_id
。类似于answer_comment
。