Настройка Sequelize: использование единственного числа в названиях

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы при использовании Sequelize имена таблиц были в единственном числе, необходимо при определении модели задать опцию freezeTableName: true:

JS
Скопировать код
const Model = sequelize.define('Model', {/* атрибуты */}, { freezeTableName: true });

Так, блокируется автоматическое преобразование имени модели во множественное число и обеспечивается совпадение имени таблицы с именем модели.

Кинга Идем в IT: пошаговый план для смены профессии

Соглашения об именовании таблиц: Обзор

По умолчанию, Sequelize формирует имена таблиц во множественном числе, но в ряде случаев может быть предпочтительно использование единственного числа. Sequelize предоставляет возможность управления данным поведением.

Визуализация

Можно представить Sequelize как "архитектора схем баз данных". Без специальной настройки он создает таблицы с именами во множественном числе:

Markdown
Скопировать код
Стандартное поведение Sequelize:
Архитектор баз данных 🧑‍💻📚📚 (Таблицы во множественном числе)

Если же мы хотим:

Markdown
Скопировать код
Схему таблицы в единственном числе:
Архитектор баз данных 🧑‍💻📚 (Таблица в единственном числе)

Тогда настроим Sequelize вот таким образом:

JS
Скопировать код
const sequelize = new Sequelize('db', 'user', 'pass', {
  define: {
    freezeTableName: true // 🎨 включает использование имен таблиц в единственном числе
  }
});

С тех пор Sequelize начинает создавать таблицы с заданными именами, не превращая их во множественное число.

Гранулярный контроль над именами таблиц

Настраиваемая ручная установка имени таблицы

Для создания собственного имени таблицы применяется параметр tableName:

JS
Скопировать код
const User = sequelize.define('User', {/* атрибуты */}, { 
  freezeTableName: true,
  tableName: 'MyUserTable' // задаем свое уникальное имя таблицы
});

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

Глобальная настройка использования имен таблиц в единственном числе

Опция freezeTableName: true в конфигурации Sequelize обеспечивает ее глобальное применение ко всем моделям, в результате имена всех таблиц будут в единственном числе:

JS
Скопировать код
const sequelize = new Sequelize('db', 'user', 'pass', {
  define: { freezeTableName: true }
});

Это обеспечивает однообразное именование таблиц в единственном числе по всему проекту.

Корректировка автоматически устанавливаемых параметров

Sequelize предоставляет параметры, такие как timestamps, underscored и paranoid, для более тонкой настройки свойств таблиц:

  • timestamps: false отключает автоматическое создание полей createdAt и updatedAt.
  • underscored: true применяет именование полей с нижним подчеркиванием.
  • paranoid: true позволяет "мягко" удалять записи, сохраняя их с помощью даты deletedAt.

Точное именование используя параметр 'name'

Для детального контроля использования имени модели в ассоциациях доступна опция name с параметрами singular и plural:

JS
Скопировать код
const Entity = sequelize.define('Entity', {/* атрибуты */}, {
  name: {
    singular: 'Entity',
    plural: 'Entities' // Множественное число сущности 🛍️
  }
});

Решение проблемы автоматической множественности

Отключении автоматической множественности

Для полной отмены стандартной множественности следует использовать параметр freezeTableName: true:

JS
Скопировать код
const sequelize = new Sequelize('db', 'user', 'pass', {
  define: { freezeTableName: true }
});

В новых проектах этот способ особенно удобен.

Применение глобальных настроек ко всем моделям

Глобальные настройки для всех моделей задаются с помощью параметра define:

JS
Скопировать код
const sequelize = new Sequelize('db', 'user', 'pass', {
  define: {
    freezeTableName: true,
    underscored: true,
    timestamps: true // И добавим временные метки ⏰
  }
});

Реализация сложных действий с помощью хуков

Sequelize поддерживает хуки, которые позволяют настроить пользовательское поведение при операциях с моделями:

JS
Скопировать код
sequelize.define('Model', {
  // атрибуты
}, {
  hooks: {
    beforeCreate: (model, options) => {
      // Ваш сложный код. Будьте осторожны! 🍺 
    }
  }
});

Вероятно, для каждой задачи, связанной с таблицами, найдется подходящий хук.

Полезные материалы

  1. Основы моделей | Sequelize — подробности о том, как Sequelize связывает модели и таблицы баз данных.
  2. Как заставить Sequelize использовать имена таблиц в единственном числе – Stack Overflow — советы и практические рекомендации от сообщества по именованию таблиц в единственном числе.
  3. Обсуждение формирования имен таблиц · Issue #6423 · sequelize/sequelize — обсуждение на GitHub о стандартах именования таблиц в Sequelize.
  4. Миграции | Sequelize — инструкции по управлению миграциями баз данных.
  5. Настройка Ассоциаций | Миграции Sequelize — подробное руководство по созданию связей между моделями с помощью миграций Sequelize.
  6. Начало работы с Node, Express и Postgres используя Sequelize — пошаговое руководство по использованию Sequelize с Node.js и Postgres.