Как управлять изменениями схемы во многих идентичных основанных на схеме базах данных с помощью 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
и подготовить + выполнить каждый.