Skip to content

Les contraintes Sequelize

Les contraintes dans Sequelize, un ORM (Object-Relational Mapping) utilisé avec Node.js, sont utilisées pour définir des règles spécifiques pour les propriétés des modèles de données. Prenons l'exemple d'un modèle User pour expliquer différentes contraintes :

  1. Contraintes de Validation:

    • validate: Permet d'ajouter des validations personnalisées sur les champs du modèle. Exemple : email: { type: Sequelize.STRING, validate: { isEmail: true } } garantit que l'email est dans un format valide.
  2. Contraintes de Champ:

    • primaryKey: Définit une clé primaire pour le modèle. Exemple : id: { type: Sequelize.INTEGER, primaryKey: true }.
    • autoIncrement: Utilisé souvent avec primaryKey. Incrémente automatiquement la valeur chaque fois qu'un nouvel enregistrement est ajouté.
    • unique: Assure que chaque valeur dans la colonne est unique. Exemple : username: { type: Sequelize.STRING, unique: true }.
    • allowNull: Détermine si la valeur peut être null. Exemple : lastName: { type: Sequelize.STRING, allowNull: false } signifie que lastName est obligatoire.
  3. Contraintes de Relation:

    • foreignKey: Utilisée dans les associations pour établir une relation clé étrangère. Exemple : Si un utilisateur a plusieurs posts, on peut définir une clé étrangère dans le modèle Post.
    • belongsTo, hasMany, hasOne, belongsToMany: Définissent différents types de relations entre les modèles.
  4. Contraintes par Défaut et d'Indexation:

    • defaultValue: Attribue une valeur par défaut si aucune valeur n'est fournie. Exemple : isActive: { type: Sequelize.BOOLEAN, defaultValue: true }.
    • indexes: Permet de créer des index pour optimiser les requêtes de recherche.
  5. Contraintes Temporelles:

    • timestamps: Sequelize ajoute automatiquement les champs createdAt et updatedAt si timestamps est défini à true.
  6. Contraintes de Type de Données:

    • type: Définit le type de données d'un champ. Exemple : Sequelize.STRING, Sequelize.INTEGER, etc.

En utilisant ces contraintes, vous pouvez non seulement imposer des règles strictes sur la façon dont les données sont stockées et gérées dans votre base de données, mais aussi assurer l'intégrité et la validité des données.

Exemple de Modèle User avec Sequelize

javascript
import { Sequelize } from 'sequelize'

const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'sqlite',
  storage: 'path/to/your/database.sqlite'
});

// Définition du modèle User
const User = sequelize.define('User', {
  username: {
    type: Sequelize.STRING,
    unique: true,
    allowNull: false
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    validate: {
      isEmail: true // Validation d'email
    }
  },
  createdAt: {
    type: Sequelize.DATE,
    defaultValue: Sequelize.NOW
  },
  isActive: {
    type: Sequelize.BOOLEAN,
    defaultValue: true
  }
}, {
  // options
  timestamps: false // Désactive les timestamps automatiques
});

// Synchroniser le modèle avec la base de données
User.sync().then(() => {
  console.log('Table User créée avec succès');
});

export default User
import { Sequelize } from 'sequelize'

const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'sqlite',
  storage: 'path/to/your/database.sqlite'
});

// Définition du modèle User
const User = sequelize.define('User', {
  username: {
    type: Sequelize.STRING,
    unique: true,
    allowNull: false
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    validate: {
      isEmail: true // Validation d'email
    }
  },
  createdAt: {
    type: Sequelize.DATE,
    defaultValue: Sequelize.NOW
  },
  isActive: {
    type: Sequelize.BOOLEAN,
    defaultValue: true
  }
}, {
  // options
  timestamps: false // Désactive les timestamps automatiques
});

// Synchroniser le modèle avec la base de données
User.sync().then(() => {
  console.log('Table User créée avec succès');
});

export default User

Explication du Code

  1. Configuration Sequelize : Importation de Sequelize et configuration de la connexion à la base de données.

  2. Définition du Modèle User :

    • username : Chaîne unique, ne peut pas être nulle.
    • email : Chaîne avec validation d'email.
    • createdAt : Date avec valeur par défaut.
    • isActive : Booléen avec valeur par défaut.
  3. Options du Modèle :

    • timestamps: false : Désactive les champs createdAt et updatedAt automatiques.