1

我知道这里有很多这样的问题,但这并不是我要问的典型问题。我有一张这样的桌子:

CREATE TABLE example (
   field1 INTEGER NOT NULL,
   field2 INTEGER NOT NULL,
   field3 TEXT,
   PRIMARY KEY(field1,field2)
   FOREIGN KEY(field2) REFERENCES example2(field2)
);

我要禁止的是一个 field3 有多个 field1,但允许的值具有相同的 field1 和 field3 但不同的 field2。事实上,我想要一个唯一的 field1 可用于每个 field3,但如果 field2 不同,则每个 field1 有多个 field3。

为了帮助你理解我的意思,我给你一些例子:

INSERT INTO example VALUES(1,1,"apple");
INSERT INTO example VALUES(1,2,"apple"); allowed
INSERT INTO example VALUES(2,1,"apple"); forbidden
INSERT INTO example VALUES(2,3,"apple"); forbidden

PS:PRIMARY_KEY(field1,field2,field3) 和 UNIQUE(field1,field3) 不是答案。

4

1 回答 1

0

您的关联不能通过 some PRIMARY KEY/ UNIQUEor someCHECK约束来强制执行(因为 SQLite不允许CHECK表达式中的子查询)。

您的问题是该表未正确规范化,即它不是第二范式。该field3列可能应该移动到一个单独的表中(但是如果不知道这些值的含义就很难说)。

于 2012-12-09T11:17:45.453 回答