gpt4 book ai didi

MySQL 在父表中引用非唯一值

转载 作者:行者123 更新时间:2023-11-28 23:54:55 26 4
gpt4 key购买 nike

我有一个批准标签,希望在父表中更改时将其填充下来,但是我无法弄清楚如何从子表中引用父表以下拉值。

作为引用,当我将批准从 0 更新为 时,我希望保留中的值 approval 填充到 reservedTickets 1 预订。但是,据我所知,我不能使用标准的 FOREIGN KEYREFERENCE 引用 reservations,因为 approval 不是唯一的.

在任何人谈论“为什么不只在一个表中有值”之前,它是为了区分能够更新 reservations 表的管理员和非管理员更新reservedTickets。此外,由于 reservedTickets 中的大量 FOREIGN KEY 约束必须加入 reservations 表来跟踪批准可能会很棘手,具体取决于我的起点。

CREATE TABLE reservations(
rid int NOT NULL AUTO_INCREMENT,
aid int NOT NULL,
approval tinyint(1) NOT NULL,
creationTime TIMESTAMP
DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (rid),
FOREIGN KEY (aid) REFERENCES accounts (aid)
ON DELETE CASCADE
);

CREATE TABLE reservedTickets(
rid int NOT NULL,
tid int NOT NULL,
hid int NOT NULL,
approval tinyint(1) NOT NULL,
PRIMARY KEY (tid),
FOREIGN KEY (rid) REFERENCES reservations (rid)
ON DELETE CASCADE,
FOREIGN KEY (tid) REFERENCES tickets (tid)
ON DELETE CASCADE,
FOREIGN KEY (hid) REFERENCES people (hid)
ON DELETE CASCADE,
FOREIGN KEY (approval) REFERENCES reservations (approval)
ON UPDATE CASCADE
);

最佳答案

就我个人而言,我会避免级联更新,因为许多锁是引擎问题在幕后,但如果你真的想要它,你可以对 reservations(rid,approval) 和外键设置唯一约束在引用它的 reservedTickets 中。据我所知,Mysql 带有额外索引的成本,但它可以满足您的需求。
另一方面,您可以使用 reservation 触发器实现所需的功能,或将其留给应用程序(或仅通过负责携带此标志的存储过程更新表)。

CREATE TABLE reservations(
rid int NOT NULL AUTO_INCREMENT,
aid int NOT NULL,
approval tinyint(1) NOT NULL,
creationTime TIMESTAMP
DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (rid),
CONSTRAINT UQ_RESERVATION_COMPOSITE UNIQUE(rid, approval),
...
);

CREATE TABLE reservedTickets(
rid int NOT NULL,
tid int NOT NULL,
hid int NOT NULL,
approval tinyint(1) NOT NULL,
PRIMARY KEY (tid),
FOREIGN KEY (rid,approval) REFERENCES reservations (rid,approval)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (tid) REFERENCES tickets (tid)
ON DELETE CASCADE,
FOREIGN KEY (hid) REFERENCES people (hid)
ON DELETE CASCADE , ....
);

关于MySQL 在父表中引用非唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31953084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com