Возможный вариант использования - дополнительные методы. Если вы сделаете его абстрактным, то все дочерние классы должны будут его реализовать:
abstract class Database
{
abstract public function export();
}
class MySQL extends Database
{
}
Неустранимая ошибка: класс MySQL содержит 1 абстрактный метод и поэтому должен быть объявлен как абстрактный или реализовать остальные методы (Database :: export)
blockquote>Если вы создаете обычный метод, тогда дочерние классы должны реализовывать метод только в том случае, если они планируют его поддерживать.
abstract class Database { public function export(){ throw new \LogicException(__CLASS__ . ' driver does not support ' . __FUNCTION__); } } class MySQL extends Database { }
... но вы получите приятную ошибку, если попытаетесь ее использовать:
$s = new MySQL(); $s->export();
Неустранимая ошибка: необработанное исключение 'LogicException': драйвер MySQL не поддерживает экспорт [ 117] blockquote>
Это - в основном это, я не думаю, что существует очень для добавления, кроме какой подход. Это - то, как мы делаем это в нашей компании, мы, разработчики ответственны за создание сценария и сценария отката, и мы ответственны за отъезд DB в том же состоянии, которым это было, прежде чем начальные изменения применяются. Затем DBAs выполняют его в производстве, если существует когда-нибудь проблема, они запустят скрипт отката, и все вернулось к нормальному. Просто имейте в виду зависимости и порядок, в котором Вы изменяете свои объекты и затем создаете сценарий отката назад.
Если это - относительно маленькая база данных, просто делают резервное копирование перед применением обновления. Если все это выходит из строя, Вы делаете восстановление.
После того как это идет, живые и новые данные вводятся, Вы не можете действительно откатывать его так или иначе. Просто необходимо решить проблемы.
Если Вы используете инструмент как SQL Redgate, Выдерживают сравнение, можно выполнить сравнивание между этими двумя базами данных оба пути и использовать обоих для создания сценариев, в которых Вы нуждаетесь. dev для подталкивания сценария имел бы изменения, которые Вы вносите, и prd к dev сценарию возвратился бы к orginal производственному состоянию базы данных. Это гарантирует, чтобы Вы ничего не забывали ни в одном сценарии также.
С SQL Server 2005 или более новый можно также создать снимок базы данных, который позволяет Вам возвращаться к тому состоянию в любое время. Посмотрите эту страницу для получения дополнительной информации:
Вы пропускаете пятый шаг
Более эффективный подход должен зарегистрировать изменения, поскольку они происходят как RoR миграции сделать. Для каждого изменения DB Вы создаете сценарий, который будет и применять изменение и откатывать его (по Вашему выбору, конечно). У Вас могут затем быть те сценарии при управлении версиями точно так же, как Ваш код.
Кроме того, если Вы сохраняете номер версии в базе данных, можно автоматизировать ее немного больше путем идентификации, что каждый сценарий с номером версии и наличие его увеличивают или уменьшают номер версии в базе данных согласно выполненному действию.