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)
但这似乎不起作用;当我插入新值时,它告诉我外键不匹配(尽管视图确实包含这样的项目和槽)。
难道不可能吗?我看到他们的手册页根本没有提到视图,但也没有说禁止将外键指向视图。(如果这是不可能的,我会尝试添加一个触发器。)
| 归档时间: |
|
| 查看次数: |
964 次 |
| 最近记录: |