Приложение, которое изменяет свою базовую схему БД - PullRequest
0 голосов
/ 26 марта 2010

При каких обстоятельствах (если есть) вы позволите приложению изменять базовую схему базы данных? То есть добавить новый столбец.

РЕДАКТИРОВАТЬ: немного проработать, что побудило меня задать этот вопрос. Моя система получает файлы рапорта из других систем и сохраняет извлеченные данные в таблицу отчетов. Отчет включает несколько «параметров», которые теперь жестко запрограммированы: дата, сумма, единица измерения. Эти параметры сохраняются в соответствующих столбцах в таблице «отчеты». Нам нужно ввести возможность динамического (через веб-интерфейс) добавления новых параметров, которые можно прочитать из файла отчета и вставить в базу данных.

Один из вариантов - сохранить отчеты в какой-либо сериализованной форме, но есть проблема с производительностью. Ежедневно будут создаваться тысячи отчетов, и потребуется запросить таблицу «отчеты» по значениям параметров.

Ответы [ 3 ]

2 голосов
/ 26 марта 2010

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

show columns from test like 'new_column';
if ( ! new_column )
  alter table add column new_column after some_column

Что касается других публикаций, если вы используете систему с инкрементным контролем версий в тех же схемах базы данных (но в разных экземплярах этих схем), единственный способ управлять этим изменением - это программно обновить базу данных - в противном случае вы несоответствия между версиями приложения (т. е. 1.0 и 1.1) и схемами - в этом случае невозможно применить изменения базы данных ко всем базам данных одновременно.

1 голос
/ 26 марта 2010

Я бы не стал - никогда.Я знаю, что можно вносить изменения в POJO и разрешать, например, Hibernate распространять любые изменения, необходимые для базы данных, но это, ИМХО, плохая идея, поскольку устраняет возможность осуществлять надлежащее управление конфигурацией вашей схемы.*

РЕДАКТИРОВАТЬ : возможное исключение: см. Ответ Энди (хотя я все равно попытался бы отделить шаг обновления от самого приложения).

1 голос
/ 26 марта 2010

Проще говоря, никогда. Изменение структуры базы данных должно быть контролируемым изменением - разрешение приложению (кроме, например, приложения, предназначенного для обновления базы данных с одной версии на другую) нарушает этот элемент управления.

Возможно, вы сможете подробнее рассказать о том, почему вы считаете это хорошей идеей или что побудило вас задать вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...