最後に私の質問に対する答えが見つかりました。トリガーを使用して問題を解決できます。
TABLE1
t1_prim t1_int
---------- ----------
one 5
two 10
:あなたは今、次の表を使用している場合は
CREATE TRIGGER t1_int_update_constraint
BEFORE UPDATE OF t1_int ON table1
BEGIN
SELECT CASE
WHEN new.t1_int < (SELECT max(t2_int) FROM table2 WHERE t2_prim1=old.t1_prim)
THEN (SELECT RAISE(ABORT,
'Input smaller than maximum of all values for t2_int in database!'))
END;
END;
CREATE TRIGGER t2_int_update_constraint
BEFORE UPDATE OF t2_int ON table2
BEGIN
SELECT CASE
WHEN new.t2_int > (SELECT t1_int FROM table1 WHERE t1_prim=old.t2_prim1)
THEN (SELECT RAISE(ABORT,
'Input bigger than value in t1_int!'))
END;
END;
CREATE TRIGGER t2_int_insert_constraint
BEFORE INSERT ON table2
BEGIN
SELECT CASE
WHEN new.t2_int > (SELECT t1_int FROM table1 WHERE t1_prim=new.t2_prim1)
THEN (SELECT RAISE(ABORT,
'Input bigger than value in t1_int!'))
END;
END;
を:
CREATE TABLE table1
(t1_prim TEXT PRIMARY KEY,
t1_int INTEGER NOT NULL);
CREATE TABLE table2
(t2_prim1 TEXT,
t2_prim2 INTEGER,
t2_int INTEGER NOT NULL,
PRIMARY KEY (t2_prim1, t2_prim2),
FOREIGN KEY (t2_prim1) REFERENCES table1(t1_prim));
更新や挿入するためのトリガーを作成:ここで働い例ですテーブル2
t2_prim1 t2_prim2 t2_int
---------- ---------- ----------
one 1 5
one 2 4
two 1 7
two 2 5
two 3 1
あなたはこの出力を得る:
UPDATE table1 SET t1_int=4 WHERE t1_prim='one';
エラー:データベース内t2_intのすべての値の最大値よりも小さい入力!
UPDATE table1 SET t1_int=6 WHERE t1_prim='two';
エラー:データベースのt2_intのすべての値の最大値よりも小さい値を入力してください!
UPDATE table2 SET t2_int=8 WHERE t2_prim1='one' AND t2_prim2=1;
エラー:t1_intの値より大きい値を入力してください!
UPDATE table2 SET t2_int=11 WHERE t2_prim1='two' AND t2_prim2=2;
エラー:t1_intの値より大きい値を入力してください!
INSERT INTO table2 VALUES ('one', 3, 6);
エラー:t1_intの値より大きい値を入力してください!
ものは完璧にうまく機能している間:
INSERT INTO table2 VALUES ('one', 3, 6);
UPDATE table2 SET t2_int=1 WHERE t2_prim1='one' AND t2_prim2=1;
UPDATE table1 SET t1_int=8 WHERE t1_prim='two';
を