Контроль версий базы данных для MySQL

Какой метод вы используете для контроля версий вашей базы данных? Я зафиксировал все наши таблицы базы данных как отдельные сценарии .sql в нашем репозитории (mercurial). Таким образом, если кто-либо из членов группы внес изменения в таблицу сотрудников, скажем, я сразу узнаю, какая именно таблица была изменена, когда я обновлю свой репозиторий.

Такой метод был описан в:Каковы лучшие практики для сценариев базы данных под контролем кода. Presently, I'm writing a python script to execute all the .sql files within the database folder, however, the issue of dependencies due to foreign-key constraints ensures we can't just run the .sql files in just any order.

Скрипт python предназначен для генерации файла с порядком, в котором нужно выполнять файлы .sql. Он выполнит файлы .sql в порядке их появления в файле tableorder.txt. Невозможно выполнить таблицу до тех пор, пока не будет выполнена таблица внешних ключей, например:

tableorder.txt

table3.sql
table1.sql
table7.sql и так далее

Я уже сгенерировал список зависимостей для каждой таблицы из кода, проанализировав результат & quot; show create table & quot; команда mysql. Список зависимостей может выглядеть так:

tblstate: tblcountry //tblcountry.sql must be executed before tblstate.sql etc
tblemployee: tbldepartment, tblcountry

Чтобы сгенерировать содержимое файла tableorder.txt, мне понадобится алгоритм, который будет выглядеть так:

function print_table(table):
  foreach table in database:
    if table.dependencies.count == 0
      print to tableorder.txt
    if table.dependencies.count > 0
      print_table(dependency) //print dependency first
end function

Как вы можете себе представить, это требует много рекурсии. Я начинаю задумываться, стоит ли это усилий? Есть ли какой-нибудь инструмент там? Какой инструмент (или алгоритм) существует для генерации списка порядка выполнения отдельных таблиц и представлений .sql с учетом зависимостей? Лучше ли управлять версиями отдельным файлом .sql для каждой таблицы / представления или лучше управлять версиями всей базы данных в один файл .sql? Я буду признателен за любой ответ, так как это заняло так много дней. Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос