【问题标题】:one to one relationship between three tables三个表之间的一对一关系
【发布时间】:2016-10-21 19:17:22
【问题描述】:

嗨 我想在三个表之间实现一对一的关系,这样 rtTicketId (1) 只能用于 vmID(1) 而不能由 dbId(1) 使用。

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 表都可以使用相同的 rtTicketId 连接到请求表。 我不想要那个

【问题讨论】:

  • 完全清楚 - 请求可以针对数据库或虚拟机,但不能同时针对两者?
  • @NevilleK 是的,一次只能请求一个人
  • stackoverflow.com/questions/1493229/… - 这能回答你的问题吗?
  • @NevilleK yup 解决了我的问题,谢谢

标签: mysql sql database


【解决方案1】:

也许多态关联会有所帮助;例如与 VM 不同,因为 DB 有一个列来存储 rtTicketId,RT 将有 2 个列,例如 fkId 和 fkType,fkId 将主键存储在 VM 或 DB 中,fkType 定义查询时要查看的位置(DB 或 VM)。

参见此处:Possible to do a MySQL foreign key to one of two possible tables?

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

SELECT * FROM RequestTable WHERE rtTicketId NOT IN (SELECT DISTINCT rtTicketId FROM your_other_table_vm_or_db)

【讨论】:

  • 以编程方式执行它可能不是有效的方式,因为稍后数据库将增长为具有其他类型,如桌面和其他一些表(除了 vm 和 db)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2012-07-11
  • 2017-03-31
  • 2011-08-10
  • 2019-12-17
  • 2021-09-10
  • 2018-03-26
相关资源
最近更新 更多