2015-10-16 137 views
-1

我正在设计在线测试应用程序,用户登录,参加考试并查看得分。很明显,我们需要有问题,回答表如何避免表格之间的循环依赖关系

和我的设计总结如下

QUESTION 
-------- 
ID 
ANSWER_ID (ANSWER FOR THIS QUESTION) 
TEXT 
: 

ANSWER 

ID 
TEXT 
QUESTION_ID 

的如: - 题有4个选项,所以这将有同样的问题,ID有4个答案行。和问题表将具有(以上4)

附图enter image description here

但在上述情况下的实际answer_id,它具有循环依赖我感觉会产生问题时等休眠我用户数据库框架,以处理数据。寻找任何替代设计以上要求

回答

2

问问自己,两张表之间的关系是什么?问题可以有多个答案?答案可以有多个问题?如果是,你有一个m:n的关系。如果你只回答第一个问题,你有1:n的关系。

如果您有1:n relationship,则表question表中不需要answer_id。加入会就像

... 
FROM question q 
JOIN answer a ON q.question_id = a.question_id 
... 

工作,如果你有一个m:n relationship,就需要第三个表能解决关系(它被称为结合表,或桥接表)。

表:

问题(question_id)
答案(answer_id)
question_2_answer(question_id,answer_id)

加入:

... 
FROM question q 
JOIN question_2_answer q2a ON q.question_id = q2a.question_id 
JOIN answer a ON a.answer_id = q2a.answer_id 
... 

顺便说一句,你不需要BIGINT作为数据类型,只需INT会做,或​​者你会有超过2147483647问题/答案?

+0

柜面1方案的..我怎么会知道哪个选项是答案的一个问题? –

+0

完全像我加入我的答案。没有“其他方式加入”。像我一样加入表格,就是这样。或者我不明白你的问题。 – fancyPants

+0

如果你想知道,例如如何得到没有答案的问题(用我的连接你会得到一个空的结果(只是'连接'相当于'内部连接'),[这里](http:// blog。编码horror.com/a-visual-explanation-of-sql-joins/)对不同连接的一个很好的解释。 – fancyPants