mariadb 如何从ID引用的表中添加UNIQUE(即连接)?

pjngdqdw  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(50)

我的数据库有两个表与我的问题相关:
process,列titleproject_id(以及更多)
project,列idclient_id(以及更多)
我想在titleclient_idADD 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`);

字符串

qnzebej0

qnzebej01#

正如我理解你的问题,你想阻止任何两个具有相同标题的进程连接到同一个客户端。或者反过来说:一个客户端不能连接到两个(或更多)具有相同标题的进程。
所以你需要一个UNIQUE KEY(client_id, title)上,但是没有一个表包含这两个列。但是你可以有一个进程来包含来自链接项目的client_id的副本,并使其成为外键的一部分。然后你可以在process(client_id, title)上定义一个UNIQUE KEY
process表的模式可能如下所示:

create table process(
  id int primary key,
  title varchar(255),
  project_id int,
  client_id int,
  -- other columns
  foreign key (client_id, project_id)
    references project(client_id, project_id)
    on update cascade on delete cascade,
  unique key (client_id, title)
);

字符串
你必须在INSERT语句中复制client_id。但是系统可以维护更新。

相关问题