mysql - 外键应该引用哪个表?
问题描述
我有一个带有下表的数据库。
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 表引用实体表是错误的吗?我希望这个问题不是含糊的。
解决方案
我建议将每张新票写入 STORE 表,然后将其复制到 ACTIVE 表中。所以你不会对 id 字段有任何问题。
如果 ACTIVE 表中的票已关闭,则将数据复制到 STORE 表中并将其从活动表中删除。
如果您搜索票证,则首先搜索 ACTIVE 表,然后再搜索 STORE 表。
如果 STORE 表中的票证标记为活动,则将其复制回 ACTIVE 表。
但如果你没有那么多票,我只会坚持一张桌子。我在一张桌子上有 6 年的票,而且速度并没有变慢。只需将它们标记为活动和非活动即可。我什至不删除票只是将其标记为已删除。
推荐阅读
- javascript - 对 JSON 数据进行分类
- python - Ajax 中给出的数据未到达 views.py 文件中,因此警报功能不起作用
- angular - 为什么在 service.ts 中刷新页面时我的变量值会发生变化?
- python - auth0 python 未经授权的请求混乱
- r - 如何解决脚本上的代码错误?
- scheme - 解决方案中的八皇后
- amazon-web-services - AWS Firehose 到 S3 的内容前缀
- select - Material-ui Select Component中发生选择事件时需要去除(灰色)背景色
- docker - 如何使用主机挂载 docker 容器以查看挂载主机文件夹中容器的配置?
- java - 使用wiremock时返回自定义异常