我将从c ++ opp设计模式中道歉
对于示例三个表数据库(省略了非键字段),是否可以在REFERENCES部分中交叉引用另一个表?
CREATE TABLE `Attempt` (
`attempt_ID` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` TEXT NOT NULL,
`assessment_ID` INTEGER NOT NULL,
`timestamp` INTEGER NOT NULL,
FOREIGN KEY(`username`) REFERENCES Students ( username ),
FOREIGN KEY(`assessment_ID`) REFERENCES Assessments ( assessment_ID )
);
CREATE TABLE `Questions` (
`assessment_ID` INTEGER NOT NULL,
`question_number` INTEGER NOT NULL,
PRIMARY KEY(assessment_ID,question_number)
);
CREATE TABLE "Responses" (
`attempt_ID` INTEGER,
`question_number` INTEGER,
PRIMARY KEY(attempt_ID,question_number),
FOREIGN KEY(`attempt_ID`) REFERENCES Attempt ( attempt_ID )
);
显而易见的解决方案是在每个问题中包含assessment_ID 但是如果我们已经知道了attempt_ID,那么我们可以查找评估ID吗?
CREATE TABLE "Responses" (
`attempt_ID` INTEGER,
`assessment_ID` INTEGER,
`question_number` INTEGER,
PRIMARY KEY(attempt_ID,question_number),
FOREIGN KEY(`attempt_ID`) REFERENCES Attempt ( attempt_ID )
FOREIGN KEY(`assessment_ID`,`question_number`) REFERENCES `Questions` ( `assessment_ID`,`question_number` )
);
Sub_Reference可能吗?
答案 0 :(得分:0)
你似乎想做的不是“理智”。
这似乎是你想在Response表中做的。
FOREIGN KEY(question_number)
REFERENCES Questions(assessment_ID, question_number)
那不是“理智”。 (那不是SQL。)一列(question_number)不能引用两列(assessment_ID,question_number)。
很难说你需要做些什么来解决这个问题。尝试和响应之间的区别尚不清楚。如果响应是对问题的回答,那么您的Responses表应该看起来像这样。
CREATE TABLE responses (
attempt_ID integer not null,
assessment_ID integer not null,
question_number integer not null,
primary key (attempt_ID, assessment_ID, question_number),
foreign key (attempt_ID) references Attempt (attempt_ID ),
foreign key (assessment_ID, question_number)
references questions (assessment_ID, question_number)
);
显而易见的解决方案是在每个中包含assessment_ID question.row但是如果我们已经知道了attempt_ID那么我们就可以查找了 评估ID?
您是否能找到某种方式导航到您想要的信息并不是真正相关的。实际上,这种事情是数据关系模型开发解决的问题。如今,我们基于功能依赖和规范化设计数据库。
另外,如果您在SQLite中设计新数据库,则可能不应该使用MySQL语法编写代码。