SQLite:使外键唯一

Bor*_*isV 2 sqlite

我正在为 Mac OS X 应用程序使用 SQLite 3.8.11。我的目标是创建一个表,然后在内部引用其他表中的某个字段。例如:

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);
CREATE TABLE track(
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
Run Code Online (Sandbox Code Playgroud)

但是,我想将trackartist插入到track 中,以便每一行都包含唯一的trackartist值。如果trackartist值已经在轨道内- 必须忽略新值。我怎么能在这个设置中做到这一点?UPDATE OR IGNORE 命令似乎不起作用,值重复。

Rob*_*Rob 5

这是两个独立的问题:FOREIGN KEY仅指定要插入的值必须存在于另一个表中,但未指定它在此表中可能出现的次数。的UNIQUE约束,而另一方面,要求该值可能不会出现不止一次在该表中。

我不确定“艺术家曲目”模型是否有意义,但让我们想象一下,您真的想指定一位艺术家不能拥有多个曲目。因此,您不仅要指定trackartist引用artist(artistid),还要指定它是UNIQUE

CREATE TABLE track(
  trackname TEXT,
  trackartist INTEGER UNIQUE,
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
Run Code Online (Sandbox Code Playgroud)