Caso 1: l'inizializzazione del database
Se il vostro scopo è quello di aggiungere le relazioni durante l'inizializzazione della struttura del database è meglio utilizzare solo sync
metodo invece di aggiungere manualmente utilizzando le migrazioni. Se i tuoi modelli sono progettati correttamente e hanno relazioni definite, verranno creati automaticamente durante l'esecuzione del metodo sync
.
Dai uno sguardo allo sequelize express example. In elenco modelli avete tre file:
index.js
- che comprende tutti i modelli
task.js
- compito modello
user.js
- utente modello
Guardate task.js
contenuti, a partire dalla linea 7 della il seguente codice crea una relazione tra i modelli Utente e Attività:
classMethods: {
associate: function(models) {
Task.belongsTo(models.User, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
}
}
Se si preparano correttamente le relazioni nei file di modello, la sincronizzazione creerà le chiavi esterne per l'utente. Le migrazioni non sono necessarie in questo caso.
Vi incoraggio a leggere l'intero esempio espresso readme.md
e a sfogliare i file del repository per vedere come funzionano le cose con express e sequelize.
Caso 2: migrazione Struttura del database
Nel caso in cui si dispone già di alcuni dati che si desidera conservare, è necessario utilizzare script di migrazione, perché l'unico modo per la sincronizzazione di ristrutturare il database è di distruggerla completamente a fianco di tutti i suoi dati.
È possibile leggere informazioni di base su migrations in the sequelize docs. Sfortunatamente i documenti non coprono la creazione di una relazione. Supponiamo che tu voglia creare la seguente relazione: l'utente appartiene al gruppo. Per creare una colonna sul lato utente della relazione, è possibile utilizzare il metodo addColumn
.
queryInterface.addColumn(
'user',
'group_id',
{
type: Sequelize.INTEGER,
allowNull: true
}
)
Purtroppo non c'è una bella funzione (ancora) per creare il vincolo di chiave esterna per voi, ma è possibile farlo manualmente utilizzando il metodo di query sequelize. Esempio PostgreSQL:
queryInterface.sequelize.query("ALTER TABLE user
ADD CONSTRAINT user_group_id_fkey FOREIGN KEY (group_id)
REFERENCES group (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;");
Edit: Aggiunto caso di migrazione struttura del database
Si desidera utilizzare le migrazioni per creare la struttura iniziale del database o si desidera aggiornare la struttura del database corrente utilizzando le migrazioni? – ezpn
Voglio creare la struttura iniziale del database prima – loics2