我有一个mysql
数据库,其中包含以下表格:
Penalties
Scores
player_instance
当惩罚被更新/删除时,它将更新分数(通过触发器)。此外,当删除player_instance
行时(通过ON DELETE CASCADE
),相关的惩罚行将被删除。问题是在mysql
中,外键约束不会激活触发器。因此,当player_instance
被删除时,它将删除相关的惩罚行,但不会更新分数。
我一直在考虑如何解决这个问题:
使用支持在外键约束上激活触发器的数据库。例如PostgreSQL
。将脚本从mysql
更改为PostgreSQL
会有多困难?
我可以用触发器替换外键约束(即CREATE TRIGGER ON DELETE...
)。这应该意味着当player_instance
被删除时,它会触发删除Penalties
,而Scores
会更新VIEW
。
我可以完全取消分数(在比赛中记录得分)。相反,我可以创建一个{{1}}来总结惩罚中的所有积分以获得比赛中的得分。
这对性能或设计来说是个坏主意吗?
对上述内容的任何想法,包括其他选项都会很棒。
答案 0 :(得分:1)
这取决于:您多久查询一次表格"惩罚"? 我们假设:经常。
如果可以,请切换到PostgreSQL。 它很简单。坚固,优雅。你需要学习新的东西,但没什么可怕的。
第3点表示每次都要重新计算的数据。
第2点可以工作,但它是一种解决方法。如果交换机数据库很重,那就是好的解决方案。