Освоение проверки уникального индекса в Sequelize для нескольких столбцов

В этой статье блога мы рассмотрим различные методы проверки уникальных индексов в нескольких столбцах с использованием Sequelize, популярного ORM JavaScript для управления базами данных. Мы предоставим примеры кода и объясним шаги в простой для понимания форме. Давайте погрузимся!

Метод 1: использование ограничения validate.
Один из способов обеспечить уникальность нескольких столбцов — использовать ограничение validate, предоставляемое Sequelize. Вы можете определить собственную функцию проверки, которая проверяет уникальность, и применить ее к соответствующим столбцам. Вот пример:

const { Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql' });
class User extends Model {}
User.init({
  email: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: 'uniqueEmailAndUsername',
    validate: {
      isUnique: async function (value) {
        const user = await User.findOne({ where: { email: value } });
        if (user) {
          throw new Error('Email already exists!');
        }
      },
    },
  },
  username: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: 'uniqueEmailAndUsername',
  },
}, { sequelize, modelName: 'user' });
sequelize.sync();

В этом примере мы определяем пользовательскую функцию проверки isUniqueдля столбца email. Он проверяет, существует ли уже запись с таким же значением адреса электронной почты в базе данных, и выдает ошибку, если найден дубликат.

Метод 2: использование ограничения unique.
Другой подход заключается в использовании ограничения uniqueнепосредственно для столбцов, которые должны иметь уникальные значения. Sequelize автоматически создаст уникальный индекс для этих столбцов. Вот пример:

User.init({
  email: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true,
  },
  username: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true,
  },
}, { sequelize, modelName: 'user' });
sequelize.sync();

В данном случае мы устанавливаем для параметра uniqueзначение trueкак для столбцов email, так и для username. Sequelize создаст уникальный индекс для каждого столбца, гарантируя, что дубликаты не допускаются.

Метод 3. Использование файла миграции.
Если вы работаете с существующей базой данных, вы можете использовать файл миграции, чтобы добавить уникальный индекс для нескольких столбцов. Вот пример использования метода addColumn:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.addColumn('users', 'email', {
      type: Sequelize.STRING,
      allowNull: false,
    });
    await queryInterface.addColumn('users', 'username', {
      type: Sequelize.STRING,
      allowNull: false,
    });

    await queryInterface.addConstraint('users', {
      fields: ['email', 'username'],
      type: 'unique',
      name: 'uniqueEmailAndUsername',
    });
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.removeConstraint('users', 'uniqueEmailAndUsername');
    await queryInterface.removeColumn('users', 'email');
    await queryInterface.removeColumn('users', 'username');
  }
};

В этом примере мы сначала добавляем столбцы emailи usernameв таблицу users, используя addColumn. метод. Затем мы используем метод addConstraint, чтобы определить уникальный индекс для обоих столбцов.

В этой статье мы рассмотрели различные методы проверки уникальных индексов в двух столбцах с помощью Sequelize. Мы рассмотрели использование ограничения validate, ограничения uniqueи создание уникального индекса с помощью файла миграции. С помощью этих методов вы можете обеспечить целостность данных и предотвратить дублирование в вашей базе данных. Приятного кодирования!