2015-11-15 54 views
1

我有两张桌子,一个问题桌子和一个答案桌子。一张桌子可以成为两个父母桌子的孩子吗

然后我有一个评论表,以便评论可以附加到问题或答案。每个问题或答案都有很多评论。

我应该创建两个评论表吗?或者将问题和答案表都与单个评论表相关联。我更喜欢这个,但它似乎是非标准化的。

+0

是的,它可以。 – i486

回答

2

这取决于。一般来说,你想拥有外键关系。如果每个问题/答案只允许一条评论,那么很容易。 A commentId进入每个表中,QuestionsAnswers。有一个简单的外键关系。

保持外键关系,并允许多个评论是有点窍门。最简单的方法可能是有两个联结表,QuestionCommentsAnswerComments。这想要适当的父母和Comments表。

注意:是有原因的,你想为两个目的独立意见表。例如,您可以将答案的评论分为不同的组。或者,您可能只允许每个用户对某个问题发表一条评论。如果注释位于不同的表中,这些不同的业务规则可能更容易实现。

+1

要扩展Gordon的答案......您的问题可能会揭示您架构中缺少的表或您即将实现的内容。如果一个Child表在一张桌子上显然没有单个父键,那么你可能会做些什么,你会后悔的。我不知道你的情况的默认答案是你想要两张表。当您将FK加入模型中的“测试服务实例标识”表时,此细节可能会显现出来。 –

+0

@SqlSurfer你说得很好。 –

1

可以用评语表通过使用连接

 
     table question: 
id |questionDes |commentId| 
1 | what  | 2  | 

table answer 
|id | answerDes| commentId| 
|201| yes  |  44 | 
table comment 
|id |commentDes| commentId| 
|2 | hi  |2   | 
|4 |nii  | 44  | 

you sql query will be-- 
SELECT questionDes.question, commemtDes.comment 
FROM question 
INNER JOIN comment 
ON commentId.question=commentId.comment; 
and 
SELECT answerDes.answer, commemtDes.comment 
FROM answer 
INNER JOIN comment 
ON commentId.answer=commentId.comment; 
3

从问题的两个外键创建comments表,并回答表回答,问题表。它够了。