0

Как задать длину Sequelize.STRING?

11

Я хочу определить длину типа данных в Sequelize. Вот мой исходный код:

var Profile = sequelize.define('profile', {
  public_id: Sequelize.STRING,
  label: Sequelize.STRING
});

Это создает таблицу profiles с полем public_id, у которого тип данных varchar(255).

Я хотел бы задать public_id с длиной varchar(32).

Я искал в документации и на Stack Overflow, но не нашел решения...

Как я могу это сделать? Пожалуйста, помогите!

1 ответ(ов)

0

Во-первых, я думаю, вам стоит немного пересмотреть свой дизайн. Основной момент в том, что ограничения по длине должны быть значимыми, а не просто предназначены для экономии пространства. PostgreSQL не хранит 'A'::varchar(10) иначе, чем 'A'::text (оба хранятся как строки переменной длины, длина которых соответствует фактическому значению, вместе с указателем длины и некоторой другой метаданной). Поэтому используйте максимально возможный размер, который подходит вам, и применяйте ограничения не для экономии пространства, а для обоснованного контроля. Если сомневаетесь, не ограничивайте. Если нужно, чтобы значение помещалось на почтовую этикетку, задайте соответствующее ограничение.

Во-вторых, ответ Dankohn выше:

var Profile = sequelize.define('PublicID', {
  public_id: {
    validate: { len: [0, 32] }
  }
});

— это способ добавить такое ограничение на стороне фронтенда. Еще раз, такие ограничения должны основываться на том, что вам действительно необходимо, а не на том, что кажется хорошей идеей в данный момент. Хотя, как правило, проще ослабить ограничения, чем ужесточить их, в случае длины строк действительно разумнее действовать наоборот.

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь