一对多的外键关系Sqlite

时间:2014-12-15 22:32:07

标签: javascript database sqlite

所以现在我正在尝试使用sqlite在3个不同的表之间绘制关系我对sqlite比较新,但是看到你可以通过使用外键来绘制关系,从而优化性能。所以现在这里是我的sql语句创建我的表:

'CREATE TABLE IF NOT EXISTS shifts (
 shifts_id primary integer,
 shift_base_id integer,
 shift_site_id integer)';

'CREATE TABLE IF NOT EXISTS sites (
 site_id primary integer, 
 site_info text,
 FOREIGN KEY(site_id) REFERENCES shifts(shift_site_id))';

 'CREATE TABLE IF NOT EXISTS bases (
 base_id primary integer, 
 base_info text,
 FOREIGN KEY(base_id) REFERENCES shifts(shift_base_id))';

所以我要做的是用id表示子表(站点和基数)与父表(shift)之间的关系。我遇到的问题是我遇到了“外键不匹配”错误。我在某处读到,在sqlite中,您只能在父表中引用主键或唯一键。这个问题是多个班次可以共享相同的站点和基础。例如,base_id可以等于1234,多个班次将有shift_base_id = 1234.

还有时候base表中的base_id在轮班表中没有匹配的shift_base_id。

所以我的问题是如何在多个表之间引用这一个到多个关系?以及如何使这种关系成为可选的。

1 个答案:

答案 0 :(得分:1)

你的关系倒退了。您可以在表中列出引用其他表的外键。

CREATE TABLE IF NOT EXISTS shifts (
 shifts_id primary integer,
 shift_base_id integer,
 shift_site_id integer,
 FOREIGN KEY (shift_base_id) REFERENCES bases (base_id),
 FOREIGN KEY (shift_site_id) REFERENCES site (site_id));