Esta migración crea la tabla idiomas, diseñada para almacenar los idiomas que los usuarios conocen, junto con su nivel de dominio. Cada idioma está vinculado a un usuario mediante una clave foránea.
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('idiomas', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
nombre: {
type: Sequelize.STRING,
allowNull: false,
},
nivelDominio: {
type: Sequelize.ENUM('basico', 'intermedio', 'avanzado', 'experto'),
allowNull: false,
},
usuarioId: {
type: Sequelize.INTEGER,
references: {
model: 'users', // Nombre de la tabla relacionada
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('idiomas');
}
};
id
INTEGERautoIncrement: true: Incremento automático para cada registro.primaryKey: true: Clave primaria de la tabla.allowNull: false: No puede ser nulo.nombre
STRINGallowNull: false: No puede ser nulo. Indica el nombre del idioma.nivelDominio
ENUM('basico', 'intermedio', 'avanzado', 'experto')allowNull: false: No puede ser nulo. Define el nivel de dominio del idioma.usuarioId
INTEGERusers, conectada mediante el campo id.onUpdate: 'CASCADE': Si el id en la tabla users cambia, se actualiza en esta tabla.onDelete: 'CASCADE': Si un usuario es eliminado, se eliminan los idiomas asociados.createdAt
DATEallowNull: false: No puede ser nulo. Marca la fecha de creación del registro.updatedAt
DATEallowNull: false: No puede ser nulo. Marca la fecha de la última actualización del registro.up
idiomas con los campos y relaciones especificados.down
idiomas de la base de datos.