Appearance
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 :
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.
Contraintes de Champ:
primaryKey
: Définit une clé primaire pour le modèle. Exemple :id: { type: Sequelize.INTEGER, primaryKey: true }
.autoIncrement
: Utilisé souvent avecprimaryKey
. 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 êtrenull
. Exemple :lastName: { type: Sequelize.STRING, allowNull: false }
signifie quelastName
est obligatoire.
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èlePost
.belongsTo
,hasMany
,hasOne
,belongsToMany
: Définissent différents types de relations entre les modèles.
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.
Contraintes Temporelles:
timestamps
: Sequelize ajoute automatiquement les champscreatedAt
etupdatedAt
sitimestamps
est défini àtrue
.
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
Configuration Sequelize : Importation de Sequelize et configuration de la connexion à la base de données.
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.
Options du Modèle :
timestamps: false
: Désactive les champscreatedAt
etupdatedAt
automatiques.