перечисление grails или строковые свойства, в чем разница в будущих обновлениях БД?

#grails

#grails

Вопрос:

Допустим, создается свойство priority в виде строки, используя ограничение:

 priority(inList:['Critical', 'Major', 'Normal', 'Enhancement'])
  

Альтернативой может быть использование перечисления таким образом:

 enum Priority { CRITICAL, MAJOR, NORMAL, ENHANCEMENT }  or
enum Priority { CRITICAL('Critical'), MAJOR('Major'), NORMAL('Normal'), ENHANCEMENT('Enhancement')

Priority priority
    ...
  

и, возможно, следующее, в зависимости от того, как enum определено выше:

 static mapping = { priority enumType:"ordinal"} 
  

Мой вопрос в том, будет ли добавление будущих значений enum отлично работать с базой данных, если они будут добавлены в конце? Кроме того, если я хочу изменить, как интерпретируется значение перечисления, лучший способ сделать это, например, как:

  ... NORMAL('Minor')
  

или все будет работать хорошо, если я просто изменю 3-й элемент в списке так, как я хочу, например

     MINOR or  MINOR('Minor')
  

Ответ №1:

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

Я склонен использовать какую-то комбинацию из 2. Перечислений для жестких и быстрых констант, которые, как я знаю, обычно будут оставаться стабильными в производстве. Но таблицы типов для случаев, когда пользователям необходимо иметь возможность добавлять / изменять / удалять различные значения, или если я знаю, что у меня будет какое-то хранилище данных, таблицы типов лучше / быстрее из-за внешних ключей, с вашими обычными системами хранения (MySQL, Postgres и т.д.).

Комментарии:

1. Следующий вопрос: что, если я использую механизм сопоставления «порядковый номер»? Дает ли это мне какие-то хорошие возможности «управления», на ваш взгляд?