1

ここにそのような質問がたくさんあることは知っていますが、それは私が尋ねている典型的なものではありません. 私はそのようなテーブルを手に入れました:

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

禁止したいのは、1 つのフィールド 3 に対して複数のフィールド 1 を使用することですが、フィールド 1 とフィールド 3 が同じでフィールド 2 が異なる許可された値を保持することです。実際、field3ごとに一意のfield1を使用できますが、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

あなたの関連付けは、いくつかのPRIMARY KEY/UNIQUEまたはいくつかのCHECK制約で強制することはできません (SQLiteは式でサブクエリを許可しないためCHECK)。

問題は、このテーブルが適切に正規化されていないことです。つまり、第 2 正規形になっていません。列はfield3おそらく別のテーブルに移動する必要があります (ただし、これらの値の意味を知らずにこれを言うのは困難です)。

于 2012-12-09T11:17:45.453 に答える