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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 26 января 2019
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 и готовить + выполнять каждый из них.

...