2014-10-14 5 views
1

у меня есть база данных mysql со следующими таблицами:Создание триггеров против взглядов

  1. Penalties
  2. Scores
  3. player_instance

Когда штрафы обновляется/удален, то он будет обновлять оценки (через триггер). Также, когда строка player_instance удаляется, то (через ON DELETE CASCADE) связанная строка штрафов будет удалена. Проблема в том, что в mysql ограничения внешнего ключа не активируют триггеры. Таким образом, когда player_instance удаляется, он удаляет соответствующую строку штрафов, но не обновляет баллы.

Я думал о том, чтобы решить эту проблему:

  1. Используйте базу данных, которая не поддерживает активации триггеры внешних ключей. таких как PostgreSQL. Насколько сложно мне изменить сценарий от mysql до PostgreSQL?

  2. Я мог бы заменить ограничения внешнего ключа триггерами (то есть CREATE TRIGGER ON DELETE...). Это должно означать, что когда player_instance будет удален, он приведет к удалению Penalties, который, в свою очередь, обновит Scores.

  3. Я мог полностью скомбинировать (что записывает счет в матче). Вместо этого я мог бы создать VIEW, который суммировал бы все очки в штрафных, чтобы получить счет в матче.
    Это плохая идея для производительности или дизайна?

Любые мысли об этом, включая другие варианты, были бы замечательными.

ответ

1

Это зависит: как часто вы запрашиваете таблицу «Штрафы»? Мы предполагаем: часто.

Если вы можете, переключитесь на PostgreSQL. Он просто работает. Надежный, элегантный. Вам нужно научиться чему-то новому, но ничего страшного.

Пункт 3 означает, что данные пересчитываются каждый раз.

Пункт 2 может работать, но это обходное решение. Хорошее решение, если база данных коммутатора тяжелая.

Смежные вопросы