Mysql 三个表之间的一对一关系

Mysql 三个表之间的一对一关系,mysql,sql,database,Mysql,Sql,Database,嗨 我想实现三个表之间的一对一关系,这样rtTicketId 1只能用于vmID1,不能用于dbId1 create table IF NOT EXISTS RequestTable ( rtTicketId bigserial unique not null AUTO_INCREMENT, primary key (rtTicketId)); create table IF NOT EXISTS Vm ( vmId bigserial unique not null AUTO_

嗨 我想实现三个表之间的一对一关系,这样rtTicketId 1只能用于vmID1,不能用于dbId1

create table IF NOT EXISTS RequestTable (
  rtTicketId bigserial unique not null AUTO_INCREMENT, 
  primary key (rtTicketId));

create table IF NOT EXISTS Vm (
  vmId bigserial unique not null AUTO_INCREMENT, 
  primary key (vmId),
  foreign key (rtTicketId) references RequestTable(rtTicketId));

create table IF NOT EXISTS Db (
  dbId bigserial unique not null AUTO_INCREMENT, 
  rtTicketId bigserial unique not null,
  primary key (dbId),
  foreign key (rtTicketId) references RequestTable(rtTicketId));

我已经这样做了,但这只会在两个单独的对象之间创建一对一的关系。我希望rt id是唯一的。现在,vm和db表都可以使用相同的RTTICKTID连接到请求表。我不希望多态性关联会有帮助;e、 g.代替VM,因为DB有一列存储RTTICKTID,RT将有两列,fkId和fkType。例如,fkId在VM或DB中存储主键,fkType定义查询DB或VM时查看的位置

另见此处:

我可以考虑的另一个选项是以编程方式执行此操作,例如:

从RequestTable中选择*,其中RTTICKTID不在SELECT DISTINCT中 RTTICKTID从您的\u其他\u表\u vm\u或\u db


也许多态关联会有所帮助;e、 g.代替VM,因为DB有一列存储RTTICKTID,RT将有两列,fkId和fkType。例如,fkId在VM或DB中存储主键,fkType定义查询DB或VM时查看的位置

另见此处:

我可以考虑的另一个选项是以编程方式执行此操作,例如:

从RequestTable中选择*,其中RTTICKTID不在SELECT DISTINCT中 RTTICKTID从您的\u其他\u表\u vm\u或\u db


非常清楚-一个请求可以是DB或VM,但不是两者都有?@NevilleK是的,一次只能请求一个-这回答了你的问题吗?@NevilleK是的,解决了我的问题谢谢。非常清楚-一个请求可以是DB或VM,但不是两者都有?@NevilleK是的,一次只有一个人可以请求-这回答了你的问题吗?@NevilleK是的,这解决了我的问题,谢谢,用编程的方式来实现它可能不是一种有效的方式,因为以后数据库将发展为有其他类型,如桌面和一些其他表,而不是vm和数据库在以后的数据库中,有效的方法是使用其他类型的表,如桌面和vm和db以外的其他表