Триггеры или PHP-скрипты?


Итак, я разрабатываю систему на PHP+ MySQL, которая содержит около 4 связанных таблиц. Любая форма вставки, обновления и удаления в одной таблице обычно отражается по крайней мере в 2 таблицах.

Мой вопрос в том, что более эффективно, использование триггеров или дополнительного php-скрипта (который запускает SQL-запросы) для внесения необходимых связанных изменений?

Триггеры кажутся мне идеальными, но когда я их пишу, они становятся довольно сложными и запутанными с точки зрения читаемости. PHP позволяет использовать более "разумный" способ ведения дел.

Пожалуйста, предложите на основе как производительности, так и удобства использования/будущих изменений и т.д.

Author: Rohan Sood, 2012-09-07

4 answers

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

Это называется развязкой.

Тогда даже если в вашем (или чьем-то другом) скрипте есть ошибка, данные защищены. Для большинства (всех?) бизнес, который является самым важным активом.

Также это позволяет использовать другие механизмы для использования базы данных. Даже необработанная командная строка.

Чтобы сделать код более читабельным - отформатируйте его и используйте комментарии.

 4
Author: Ed Heal, 2012-09-07 10:18:42
  • Срабатывает, если вы хотите, чтобы ваш администратор базы данных контролировал код.
  • PHP, если вы хотите, чтобы ваши программисты контролировали код.

Чтобы уточнить:

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

Если это PHP-код, то подразумевается, что действие является частью вашей бизнес-логики и не критично для ядра структура базы данных.

 3
Author: SDC, 2012-09-07 10:24:36

На самом деле, триггеры базы данных будут работать быстрее, чем PHP-код. Это зависит от того, сколько вам нужно "перевести" данные из исходной таблицы перед обновлением остальных. Чем больше вам придется им манипулировать, тем менее читаемым и доступным для обслуживания будет ваш SQL. Поскольку он также может содержать логику бизнеса.

Итак, ИМХО, если у вас нет проблем с производительностью, вам лучше оставить это в PHP.

 1
Author: ibtarek, 2012-09-07 10:19:10

Вы можете добавить триггер в MYSQL, используя приведенный ниже синтаксис...

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name
    trigger_time trigger_event
    ON tbl_name FOR EACH ROW
    [trigger_order]
    trigger_body

trigger_time: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE }

trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
 0
Author: Rennie Bottali, 2016-06-21 06:46:48