2010-08-31 2 views
3

У меня есть приложение Java, которое использует базу данных Apache Derby со встроенным драйвером. Прямо сейчас, в процессе установки, я запускаю сценарии создания SQL из процесса.Должен ли я автозаписывать свои таблицы БД в коде или предварительно инициализировать во время установки?

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

Мой вопрос: Возможно, у меня возникли проблемы с обнаружением существования/созданием таблиц в процессе запуска приложений или ожиданием их правильной настройки моей установкой?

ответ

1

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

Обнаружение и обработка ошибок в процессе - это ИМО, всегда лучше, чем предполагать (ожидать) и сбой.

Я бы отстаивал, чтобы таблицы «ожидающих» не были правильно настроены установкой. Я не говорю, что вы не должны устанавливать базу данных во время установки. Я защищаю код, который проверяет целостность базы данных. Если у вас есть код, который проверяет наличие и дизайн вашей схемы и может восстановить/перестроить, вам не нужно беспокоиться о том, правильно ли установлена ​​установка. Это не значит, что вы не должны делать это создание во время установки, особенно если оно медленное.

Я знаю, что многие приложения, которые я разрабатываю в наши дни, имеют встроенные миграции на основе версии приложения. В основном, когда приложение запускается, он проходит цикл проверки/проверки БД, определяет состояние базы данных и выполняет связанные миграции на основе версии базы данных и версии кода.

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

0

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

0

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

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

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

+0

Это не проблема, так как это встроенная база данных; он вообще не требует настройки пользователем. –