Как управлять изменениями схемы во многих идентичных основанных на схеме базах данных с помощью mysql?

Я разрабатываю веб-платформу для управления регистрацией учащихся в школах моего региона. Для этого у меня есть 17 баз данных, работающих на MySQL (5.7.19), где есть одна база данных, а остальные 16 представляют школы. Базы данных школ (обязательно) имеют одинаковую схему, каждая из которых содержит данные, соответствующие ассоциированной школе. Я разделил этот способ, чтобы избежать задержек, поскольку каждая школа может зарегистрировать много приложений (в среднем 16 000), чтобы со временем запросы могли становиться все тяжелее.

Теперь у меня есть серьезная проблема: когда я изменяю схему базы данных школы, я должен вручную сделать это для тех из других школ, чтобы сохранить согласованность схемы, потому что мои запросы sql делаются независимо от школы. Например, если я добавлю новое поле в table_b для database_school5, мне придется вручную сделать то же самое для table_b для всех остальных баз данных.

Что я могу сделать, чтобы эффективно управлять этими изменениями? Есть ли автоматическое решение? Есть ли адаптированная СУБД для решения этой проблемы?

Кто-то сказал мне, что PostgreSQL может легко достичь этого с помощью INHERITANCE, но это касается только таблиц, если только я не провел плохое исследование.

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

Заранее спасибо.

1 ответ

SELECT ... FROM information_schema.tables
    WHERE schema_name LIKE 'database_school%'
      AND table_name != 'the 17th table'
      AND schema_name != 'database_school5'  -- since they have already done it.

Это найдет 16 имен. Что вы положили в ... это CONCAT(...) построить ALTER TABLE ... заявления.

Затем вы делаете один из них:

План A: Скопируйте / вставьте вручную ALTERs в инструмент командной строки mysql для их выполнения.

План Б: Оберните все это в хранимую процедуру, которая будет циклически пересматривать результаты SELECT и подготовить + выполнить каждый.

Другие вопросы по тегам