2009-10-16 30 views
0

比方说我有“问题群”如何保持共同的父母表的参照完整性?

 
GroupID | value 
--------+------ 
42  | How often do you 
9071 | Other question 
... 

一个表,并为每个小组的问题,我有“问题”和“可能的答案”

Group | QuestionID | value 
------+------------+------ 
42 | 5   | ... brush your teeth? 
42 | 89   | ... go to the movies? 
9071 | 709  | ... another question ... 
... 
 
Group | Answer | value 
------+--------+------ 
42 | 134 | several times per day 
42 | 135 | twice a day 
42 | 71  | once a day 
42 | 803 | every other day 
42 | 8  | once a week 
42 | 666 | once a month 
... 

现在,在PHP/HTML中,我做了一个(虚拟)完整的跨组问题和42组可能的答案以构建一个2入口表,用户将在其中选择他/她的答案(HTML version

 
How often do you  | N/d | 2/d | 1/d | d*2 | 1/w | 1/m | 
----------------------+-----+-----+-----+-----+-----+-----+ 
... brush your teeth? | () | (X) | () | () | () | () | 
... go to the movies? | () | () | () | () | (X) | () | 

我知道我需要
insert into answers (question, answer, ...) values (5, 135, ...)牙齿

insert into answers (question, answer, ...) values (89, 8, ...)电影

的问题是:有没有办法强制执行,这两个问题和答案,在answers表, “属于”同一组问题?

我想这
insert into answers (question, answer, ...) values (709, 71, ...)
被禁止的,因为问题709“属于”组9071和回答71属于组42

+0

如果我理解正确,你需要在答案表**上有一个**约束,该约束表明答案的组等于问题的组。检查你的数据库帮助,看看如何精确地写这个... – KLE

回答

0

您包括列GroupQuestionIDAnswer再创建两个外键,一个在(Group, QuestionID),另一个在(Group, Answer)

+0

谢谢,这工作:) – pmg

1

那么,答案涉及问题,不组(至少不是直接),所以我想到,“可能的答案”表应该是:

Question | Answer | value 
---------+--------+------ 
5  | 134 | several times per day 

然后,当你插入一个答案时,你给出QuestionId和AnswerId,并且他们一起引用“可能的答案”,从而间接地引用该组。

+0

什么是停止问题ID = 709(来自GroupID = 9071)和Answer = 134(来自GroupID = 42)出现在同一行? – onedaywhen

+0

对于问题709,答案134将不是可能的答案,因此用户根本无法选择答案。 –

+0

同一组答案可以用于很多很多问题。用你的方法,可以在同一组中的每个问题的“问题”表中重复可能的答案。 – pmg