请参见以下数据库结构:
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_id
和messages.user_id
都引用users.id
。messages.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
- 一个月十二个月一个月:一个月十三个月一个月
- 一个月十四个月一个月:一个月十五个月一个月
1条答案
按热度按时间x6h2sr281#
根据手册,在Sqlite3中创建复合FK如下所示: