Сохранить изменения в базе данных - лучшие практики? Управление версиями, Loggable? - PullRequest
5 голосов
/ 23 марта 2012

Я использую Symfony 2 с Doctrine в качестве ORM Framework.Я ищу лучший способ сохранить изменения, сделанные в полях базы данных.У меня будет около 100 таблиц, каждая из которых содержит около 50 полей и несколько тысяч строк.Теперь я хотел бы сохранить все изменения, сделанные в полях.

Возможности, о которых я думал: Расширение доктрины "Loggable" - сохраняет изменения в другой таблице, но не знаю, может ли это позволить такое количество записей.

триггер MySQL для каждой таблицы, сохраняющий изменения в новой таблице?

Но как лучше всего сохранять изменения?

Ответы [ 4 ]

5 голосов
/ 24 марта 2012

Вы можете использовать триггеры MySQL или упомянутую функцию регистрации DoctrineExtension.У обоих работает, у обоих есть минусы и плюсы.Триггер MySQL может записывать в отдельную таблицу (см. FAQ по триггеру mysql ). Триггеры

:

  • ++ framework, независимый от языка программирования
  • ++ работает, когда вы хотите изменить данные вручную или с помощью скрипта.
  • - Вы должны написать триггеры для каждой таблицы или найти какое-то общее решение в SQL (я не могупомогите в этом).
  • - Если вы не знакомы с хранимыми процедурами и PL / SQL, то есть кривая обучения

расширения доктрины:

  • ++ Просто поместите свою аннотацию на классы, и все готово.
  • ++ Вы можете запросить историю, отменить изменения через Repository API
  • - вы привязываетесь к поставщику, это иногда бывает, иногда не является проблемой
  • - не работает, когда вы изменяете данные вручную или с помощью сторонних сценариев.

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

1 голос
/ 23 марта 2012

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

P.S. Я не знаю, насколько велика поддержка триггеров в MySQL, так как я перешел на PostgreSQL еще до того, как MySQL получил их.

0 голосов
/ 12 октября 2012

В следующей статье приведено пошаговое объяснение + пример кода создания версий с использованием триггеров.

http://www.jasny.net/articles/versioning-mysql-data/

0 голосов
/ 23 марта 2012

Такая вещь обычно называется "сбор данных изменений". Об этом уже спрашивали со ссылкой на MySQL на SO:

Изменение сбора данных в MySQL

Может быть, этот ответ поможет вам.

Различные производители делают эту функцию в разной степени встроенной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...