创建触发器与视图

时间:2014-10-14 19:41:52

标签: mysql database postgresql database-design

我有一个mysql数据库,其中包含以下表格:

  1. Penalties
  2. Scores
  3. player_instance
  4. 当惩罚被更新/删除时,它将更新分数(通过触发器)。此外,当删除player_instance行时(通过ON DELETE CASCADE),相关的惩罚行将被删除。问题是在mysql中,外键约束不会激活触发器。因此,当player_instance被删除时,它将删除相关的惩罚行,但不会更新分数。

    我一直在考虑如何解决这个问题:

    1. 使用支持在外键约束上激活触发器的数据库。例如PostgreSQL。将脚本从mysql更改为PostgreSQL会有多困难?

    2. 我可以用触发器替换外键约束(即CREATE TRIGGER ON DELETE...)。这应该意味着当player_instance被删除时,它会触发删除Penalties,而Scores会更新VIEW

    3. 我可以完全取消分数(在比赛中记录得分)。相反,我可以创建一个{{1}}来总结惩罚中的所有积分以获得比赛中的得分。
      这对性能或设计来说是个坏主意吗?

    4. 对上述内容的任何想法,包括其他选项都会很棒。

1 个答案:

答案 0 :(得分:1)

这取决于:您多久查询一次表格"惩罚"? 我们假设:经常。

如果可以,请切换到PostgreSQL。 它很简单。坚固,优雅。你需要学习新的东西,但没什么可怕的。

第3点表示每次都要重新计算的数据。

第2点可以工作,但它是一种解决方法。如果交换机数据库很重,那就是好的解决方案。