Настройка Sequelize: использование единственного числа в названиях
Быстрый ответ
Чтобы при использовании Sequelize имена таблиц были в единственном числе, необходимо при определении модели задать опцию freezeTableName: true
:
const Model = sequelize.define('Model', {/* атрибуты */}, { freezeTableName: true });
Так, блокируется автоматическое преобразование имени модели во множественное число и обеспечивается совпадение имени таблицы с именем модели.
Соглашения об именовании таблиц: Обзор
По умолчанию, Sequelize формирует имена таблиц во множественном числе, но в ряде случаев может быть предпочтительно использование единственного числа. Sequelize предоставляет возможность управления данным поведением.
Визуализация
Можно представить Sequelize как "архитектора схем баз данных". Без специальной настройки он создает таблицы с именами во множественном числе:
Стандартное поведение Sequelize:
Архитектор баз данных 🧑💻📚📚 (Таблицы во множественном числе)
Если же мы хотим:
Схему таблицы в единственном числе:
Архитектор баз данных 🧑💻📚 (Таблица в единственном числе)
Тогда настроим Sequelize вот таким образом:
const sequelize = new Sequelize('db', 'user', 'pass', {
define: {
freezeTableName: true // 🎨 включает использование имен таблиц в единственном числе
}
});
С тех пор Sequelize начинает создавать таблицы с заданными именами, не превращая их во множественное число.
Гранулярный контроль над именами таблиц
Настраиваемая ручная установка имени таблицы
Для создания собственного имени таблицы применяется параметр tableName
:
const User = sequelize.define('User', {/* атрибуты */}, {
freezeTableName: true,
tableName: 'MyUserTable' // задаем свое уникальное имя таблицы
});
Такой подход позволяет следовать индивидуальной стратегии именования и гарантирует точное соответствие моделей Sequelize вашей бизнес-логике или текущей структуре баз данных.
Глобальная настройка использования имен таблиц в единственном числе
Опция freezeTableName: true
в конфигурации Sequelize обеспечивает ее глобальное применение ко всем моделям, в результате имена всех таблиц будут в единственном числе:
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
:
const Entity = sequelize.define('Entity', {/* атрибуты */}, {
name: {
singular: 'Entity',
plural: 'Entities' // Множественное число сущности 🛍️
}
});
Решение проблемы автоматической множественности
Отключении автоматической множественности
Для полной отмены стандартной множественности следует использовать параметр freezeTableName: true
:
const sequelize = new Sequelize('db', 'user', 'pass', {
define: { freezeTableName: true }
});
В новых проектах этот способ особенно удобен.
Применение глобальных настроек ко всем моделям
Глобальные настройки для всех моделей задаются с помощью параметра define
:
const sequelize = new Sequelize('db', 'user', 'pass', {
define: {
freezeTableName: true,
underscored: true,
timestamps: true // И добавим временные метки ⏰
}
});
Реализация сложных действий с помощью хуков
Sequelize поддерживает хуки, которые позволяют настроить пользовательское поведение при операциях с моделями:
sequelize.define('Model', {
// атрибуты
}, {
hooks: {
beforeCreate: (model, options) => {
// Ваш сложный код. Будьте осторожны! 🍺
}
}
});
Вероятно, для каждой задачи, связанной с таблицами, найдется подходящий хук.
Полезные материалы
- Основы моделей | Sequelize — подробности о том, как Sequelize связывает модели и таблицы баз данных.
- Как заставить Sequelize использовать имена таблиц в единственном числе – Stack Overflow — советы и практические рекомендации от сообщества по именованию таблиц в единственном числе.
- Обсуждение формирования имен таблиц · Issue #6423 · sequelize/sequelize — обсуждение на GitHub о стандартах именования таблиц в Sequelize.
- Миграции | Sequelize — инструкции по управлению миграциями баз данных.
- Настройка Ассоциаций | Миграции Sequelize — подробное руководство по созданию связей между моделями с помощью миграций Sequelize.
- Начало работы с Node, Express и Postgres используя Sequelize — пошаговое руководство по использованию Sequelize с Node.js и Postgres.