1
我可以定義指向視圖的外鍵(在SQLite中,3.8.2)嗎?SQLite中的外鍵可以指向一個視圖嗎?
我的情況是:我有一個項目列表;每個項目都有一個特定的類型;每種類型都有槽(屬性)的列表:
create table "type" ("type id" integer primary key);
create table "slot" (
"slot id" integer primary key,
"type id" integer not null
references "type" ("type id") on update cascade on delete cascade);
create table "item" (
"item id" integer primary key
"type id" integer not null
references "type" ("type id") on update cascade on delete cascade);
現在我想要寫的改變日誌中:項目甲,槽乙,值X:
create table "change" (
"item id" integer not null
references "item" ("item id") on update cascade on delete restrict,
"slot id" integer not null
references "slot" ("slot id") on update cascade on delete restrict,
"data" none);
顯然該插槽必須是該項目類型的插槽之一。我以爲我可以定義這樣一個觀點:
create view "item slot" as
select "item id", "slot id" from "item" join "slot" using ("type id");
,然後在「變化」定義外鍵約束:
...
foreign key ("item id", "slot id")
references "item slot" ("item id", "slot id")
on update cascade on delete cascade,
...
但這似乎並沒有工作;當我插入一個新值時,它告訴我外鍵不匹配(儘管視圖確實包含這樣一個項目和一個插槽)。
難道不可能嗎?我發現他們的手冊頁並沒有提到任何視圖,但並沒有說將外鍵指向視圖也是被禁止的。 (如果這是不可能的,我會嘗試添加觸發器。)