gpt4 book ai didi

sqlite - SQLite 中的外键可以指向一个 View 吗?

转载 作者:行者123 更新时间:2023-12-03 17:53:40 25 4
gpt4 key购买 nike

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

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

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);

现在我想写一个更改日志:项目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);

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

create view "item slot" as
select "item id", "slot id" from "item" join "slot" using ("type id");

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

...
foreign key ("item id", "slot id")
references "item slot" ("item id", "slot id")
on update cascade on delete cascade,
...

但这似乎行不通;当我插入一个新值时,它告诉我外键不匹配(尽管 View 确实包含这样一个项目和一个插槽)。

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

最佳答案

documentation

the parent key columns must be collectively subject to a UNIQUE constraint or have a UNIQUE index.

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

关于sqlite - SQLite 中的外键可以指向一个 View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23755557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com