首页 > 解决方案 > 外键应该引用哪个表?

问题描述

我有一个带有下表的数据库。

Entity (ID, EntityType),
Tickets (TicketId, ..., (TicketId refers Entity (ID)),
Contacts (ContactId, ..., (ContactId refers Entity (ID)).

我想在另一个表中复制 Ticket 数据,

TicketsDup (TicketID, ...).

在TicketsDup 表TicketID 应该参考Entity 表还是Tickets 表?

TicketsDup 的要点是仅存储有效票证。因此,非活动票证将从 TicketsDup 表中删除。但仍将存储在门票表中。用户可以将工单标记为活动的。在这种情况下,票证必须插入到 TicketsDup 表中。修改时间也必须在门票表中更新。这就是我关心的地方。当插入子行时,Mysql 会锁定父行以防止更新。这会导致死锁。为 TicketsDup 表引用实体表是错误的吗?我希望这个问题不是含糊的。

标签: mysql

解决方案


我建议将每张新票写入 STORE 表,然后将其复制到 ACTIVE 表中。所以你不会对 id 字段有任何问题。

如果 ACTIVE 表中的票已关闭,则将数据复制到 STORE 表中并将其从活动表中删除。

如果您搜索票证,则首先搜索 ACTIVE 表,然后再搜索 STORE 表。

如果 STORE 表中的票证标记为活动,则将其复制回 ACTIVE 表。

但如果你没有那么多票,我只会坚持一张桌子。我在一张桌子上有 6 年的票,而且速度并没有变慢。只需将它们标记为活动和非活动即可。我什至不删除票只是将其标记为已删除。


推荐阅读