我尝试在‘JobTypes’表中插入值,但一直收到外键不匹配错误。我想我的外键弄错了,但我不太清楚具体在哪里,因为我在这方面还是个新手,有人能帮我吗?
这就是我到目前为止所拥有的:
CREATE TABLE Projects (
Proj_ID INTEGER,
Proj_name TEXT,
PRIMARY KEY (Proj_ID)
);
CREATE TABLE Employees (
Emp_ID INTEGER,
Proj_ID INTEGER,
Emp_fname TEXT,
PRIMARY KEY(Emp_ID, Proj_ID),
FOREIGN KEY(Proj_ID) REFERENCES Projects(Proj_ID)
);
CREATE TABLE HourRates (
Job_type TEXT,
Hour_rate TEXT,
PRIMARY KEY(Job_type)
);
CREATE TABLE JobTypes (
Emp_ID INTEGER,
Job_type TEXT,
PRIMARY KEY(Emp_ID)
FOREIGN KEY (Emp_ID) REFERENCES Employees(Emp_ID)
FOREIGN KEY (Job_type) REFERENCES HourRates(Job_type)
);
1条答案
按热度按时间bakd9h0s1#
每个FKEY目标必须是主键或定义了显式唯一索引。Employees(Emp_ID)没有唯一约束或索引。如果该列是唯一的,则需要添加唯一约束或定义简单的PKEY。否则,您将无法向JobTypes表中插入任何数据。生成的错误消息令人困惑,当您创建JobTypes表时,SQLite至少应该发出某种警告,但这不是它的工作方式,可能是因为需要向后兼容。无论如何,我猜测您的Employees表实际上需要拆分成Employees和Employees_Projects(多对多)表。