sqlite 检查引用行的值是否与当前行的值匹配

kh212irz  于 2023-01-31  发布在  SQLite
关注(0)|答案(1)|浏览(118)

请参见以下数据库结构:

v---------------------------------------------------|
  v----------------------------|---------------------------|                |
+---------------+    +----+---------+------+    +----+---------+---------+-----+
| id | username |    | id | user_id | tag  |    | id | user_id | message | tag |
+----+----------+    +----+---------+------+    +----+---------+---------+-----+
| 1  | User1    |    | 1  | 1       | tech |    | 1  | 1       | Test1   | 1   |
| 2  | User2    |    | 2  | 1       | news |    | 2  | 2       | Test2   | 1   |
+----+----------+    +----+---------+------+    +----+---------+---------+-----+
   users                    tags                       messages

tags.user_idmessages.user_id都引用users.idmessages.tag引用tags.id
用户有可用的标记(tags中的行,其中rows.user_id = users.id)和消息(messages中的行,其中messages.user_id = users.id)。
问题在于,* 任何 * 标记都可以“附加”到消息上,而不仅仅是用户拥有的标记,因此我需要一个额外的限制,以确保messages.tag中引用的标记不仅存在(外键限制),而且与消息本身属于同一用户(messages.user_id = tags.user_id)。
我还没有找到一种方法来实现这个限制,这就是为什么我请求帮助。

  • Python语言:3.8.10
  • 一个月十二个月一个月:一个月十三个月一个月
  • 一个月十四个月一个月:一个月十五个月一个月
x6h2sr28

x6h2sr281#

根据手册,在Sqlite3中创建复合FK如下所示:

CREATE TABLE parent(a PRIMARY KEY, c, d, e, f);
CREATE UNIQUE INDEX i1 ON parent(c, d);

CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d));

相关问题