我的数据库有两个表与我的问题相关:process
,列title
和project_id
(以及更多)project
,列id
和client_id
(以及更多)
我想在title
和client_id
上ADD UNIQUE
。
范例:进程包含标题为“LoremIpsum”和project_id 4的记录。Project 4引用client_id 2(unique = [“LoremIpsum”,2]).添加另一个标题为“LoremIpsum”和project_id 11的记录应该是不可能的,因为项目11也引用client_id 2(unique = [“LoremIpsum”,2],too).添加另一个标题为“LoremIpsum”和project_id 8的记录应该是可能的,假设项目8引用client_id 5(unique = [“LoremIpsum”,5]).
是否可以通过外键引用对表中的值进行唯一添加?
伪代码:
ALTER TABLE process
ADD UNIQUE UN_title_x_client (title,
`SELECT client_id FROM JOIN project WHERE project.id = process.project_id`);
字符串
1条答案
按热度按时间qnzebej01#
正如我理解你的问题,你想阻止任何两个具有相同标题的进程连接到同一个客户端。或者反过来说:一个客户端不能连接到两个(或更多)具有相同标题的进程。
所以你需要一个
UNIQUE KEY
在(client_id, title)
上,但是没有一个表包含这两个列。但是你可以有一个进程来包含来自链接项目的client_id
的副本,并使其成为外键的一部分。然后你可以在process(client_id, title)
上定义一个UNIQUE KEY
。process
表的模式可能如下所示:字符串
你必须在
INSERT
语句中复制client_id
。但是系统可以维护更新。