外键应引用哪个表?

时间:2018-12-29 14:37:06

标签: mysql

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

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

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

TicketsDup (TicketID, ...).

在TicketsDup表中,TicketID应该引用实体表还是Tickets表?

TicketsDup的重点是仅存储活动的票证。因此,无效的票证将从TicketsDup表中删除。但仍将存储在票证表中。用户可以将票证标记为有效。在这种情况下,必须将票证插入TicketsDup表中。同样,必须在票证表中更新修改的时间。这就是我关心的地方。当插入子行时,MySQL锁定父行,使其无法更新。这会导致死锁。将实体表引用到TicketsDup表是否错误?我希望这个问题不模糊。

1 个答案:

答案 0 :(得分:0)

我建议将每个新票证写入STORE表,然后将其复制到ACTIVE表中。这样您就不会在id字段上遇到任何问题。

如果关闭了活动表中的票证,则将数据复制到存储表中并将其从活动表中删除。

如果要搜索票证,则先搜索“活动”表,然后再搜索“存储”表。

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

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