Каждый объект базы данных хранится в отдельном файле в системе контроля версий. Система контроля версий может содержать файлы, как в этом примере:
|- tables
|- employees.sql
|- contracts.sql
|- packages
|- contract_api.sql
|- functions
|- get_employee_name.sql
...etc...
Всякий раз, когда вы изменяете какой-нибудь объект БД, то вы должны также изменить соответствующий SQL файл (DDL) в системе управления версиями. Например, если вы изменяете пакет contract_api, тогда вы обновляете файл contract_api.sql. Поскольку этот файл был изменен - он может быть установлен, скажем, механизмом непрерывной интеграции.
НО, как вы знаете, существуют сценарии DDL, которые нельзя выполнить дважды. Например, скрипт CREATE TABLE mytable ... может выполняться только один раз. И если ваша система уже находится в производстве, вы не можете позволить себе команду «DROP TABLE mytable» в заголовке вашего сценария «CREATE TABLE ...». Поэтому для производственных систем вам нужно создать так называемые дельта-скрипты , которые будут доставлять только изменения. В этом случае вы можете просто создать новый файл, называемый employee_upd01.sql, который содержит инструкцию «ALTER TABLE mytable ADD COLUMN ...».
Через некоторое время ваше хранилище может выглядеть следующим образом:
|- tables
|- employees.sql
|- employees_upgr20091001.sql
|- employees_upgr20091004.sql
|- contracts.sql
|- packages
|- contract_api.sql
|- functions
|- get_employee_name.sql
...etc...
И это нормально, потому что: 1) когда необходимо доставить постепенные изменения сегодняшними в базу данных - развернуть файлы, которые были изменены сегодня 2) если вам нужно развернуть чистую установку вашей системы - вы запускаете все сценарии по порядку, например первый employees.sql, затем employees_upgr20091001.sql и т.д.
Поскольку каждый объект DB находится в отдельном файле в системе контроля версий, у вас есть хороший контроль над всеми изменениями.
Как вы кладете DB под SC? –
Если вы посмотрите на Мастера, о котором я упоминал, он создает скрипт со всем в нем, включая данные. Это включает в себя SP, но у нас есть отдельные файлы для тех, которые делают его более управляемым. Мы используем TortoiseSVN для управления этими файлами. Если вы посмотрите на статью Джеффа, есть более эффективные способы ... –
Я бы поднял вам кучу раз, если бы мог, удивительно, сколько людей не рассматривают SQL-изменения, как любой другой код. – HLGEM