SQLite中的外键可以指向视图吗?

Mik*_*hin 3 sqlite foreign-keys

我可以定义指向视图的外键(在 SQLite 3.8.2 中)吗?

我的情况是:我有一个项目清单;每个项目都有特定的类型;每种类型都有一个插槽(属性)列表:

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);
Run Code Online (Sandbox Code Playgroud)

现在我想写一个更改日志:项目A,插槽B,值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);
Run Code Online (Sandbox Code Playgroud)

显然,该插槽必须是该项目类型的插槽之一。我想我可以定义这样的视图:

create view "item slot" as
  select "item id", "slot id" from "item" join "slot" using ("type id");
Run Code Online (Sandbox Code Playgroud)

然后在“change”中定义外键约束:

...
foreign key ("item id", "slot id")
  references "item slot" ("item id", "slot id")
  on update cascade on delete cascade,
... 
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用;当我插入新值时,它告诉我外键不匹配(尽管视图确实包含这样的项目和槽)。

难道不可能吗?我看到他们的手册页根本没有提到视图,但也没有说禁止将外键指向视图。(如果这是不可能的,我会尝试添加一个触发器。)

CL.*_*CL. 6

文档说

父键列必须共同受到 UNIQUE 约束或具有 UNIQUE 索引。

视图不能有约束或索引,因此不可能有引用视图的外键。