Часть процедуры установки для продукта, над которым я работаю, устанавливает утилиту обновления базы данных. Утилита проверяет текущую версию базы данных пользователей и (при необходимости) выполняет серию операторов SQL, которые обновляют базу данных до текущей версии.
Две ключевые функции этой процедуры:
- После запуска он запускается без вмешательства пользователя
- Операции SQL сохраняют целостность данных пользователей
Цель - сделать процедуру настройки / базы данных максимально простой для конечного пользователя (целевая аудитория не техническая). Тем не менее, я считаю, что в некоторых случаях эти две функции противоречат друг другу. Например, я хочу добавить уникальный индекс в одну из моих таблиц - но возможно, что существующие данные уже нарушают это правило. Я мог бы:
- Тихо выбирайте, что «подходит» для пользователя, и отбрасывайте (или архивируйте) данные; или
- Попросите пользователя понять, что такое уникальный индекс, и попросите его выбрать, куда и куда идут данные
Мне не нравится ни один из этих вариантов. Я могу пойти на компромисс и вообще не создавать уникальный индекс, но это будет отстой. Интересно, что другие делают в этой ситуации?