这是我想用来设置数据库的sql脚本。基本上我有一些人在做出选择,比如测试/调查。我有关于每个人(人桌)的一些信息以及他们对每个问题(问题表)的答案。每个人都会回答多个问题(所以问题表的主键是(id, qid)
。MySQL创建外键错误150
这是我的问题,我想存储一个与每个问题相关的整数数组,所以我创建了第三个表,数组,其主键是(id, qid, idx)
,其中idx是数组中值的索引,id和qid都应该在questions表中有对应的条目,所以我创建了这些外键,但是我得到了常见的150 errno当我做到这一点。我不知道为什么。
CREATE TABLE person (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
age INT,
income INT
);
CREATE TABLE questions (
id INT NOT NULL,
qid INT NOT NULL,
a INT,
b INT,
c INT,
PRIMARY KEY (id, qid),
FOREIGN KEY (id) REFERENCES person(id)
);
CREATE TABLE array (
id INT NOT NULL,
qid INT NOT NULL,
idx INT NOT NULL,
array_value INT NOT NULL,
PRIMARY KEY (id, qid, idx),
FOREIGN KEY (id) REFERENCES person(id),
FOREIGN KEY (qid) REFERENCES questions(qid)
);
这个脚本不起作用。如果你删除它试图建立对QID外键的最后一行,将运行该脚本withou t错误。
我试图创建这个外键时发生了什么错误?
从我+1 ...... – 2014-10-10 02:13:26
谢谢,这是有效的,是我的目标。你的回答给我的印象是,我正在做的不是处理我的情况的正确方法。有没有更好的方式来做我想做的事情? (也就是将一个数组与一个表中的每个记录关联起来)。 – 2014-10-11 01:18:29
你对我看起来没问题;我个人的偏好是将一列作为问题表的主键;但是那些开发人员需要一个一致的DAO模式,需要一个单一的值,本地数据类型;不想将具有两个成员的对象(类)的额外复杂性作为标识符。 – spencer7593 2014-10-11 05:37:59