1
resposta

Relação pessoas/Cursos

Eu fiquei com uma dúvida no relacionamento de pessoas para cursos:

Podemos fazer o exercício de mínimo e máximo para encontrar as relações corretas.

Qual o mínimo de cursos que uma pessoa deve fazer? (1)

Qual o máximo de cursos que uma pessoa deve fazer? (N)

Logo temos uma relação de (1, N) entre pessoas e cursos, onde uma pessoa pode fazer de 1 a N cursos. Agora, se tratando de cursos em relação a pessoas:

Qual o mínimo de pessoas que devem ter em um curso? (1)

Qual o máximo de pessoas que devem ter em um curso? (N)

Logo temos uma relação de (1, N) entre cursos e pessoas, onde um curso pode ter de 1 a N pessoas. Quando juntamos essas relações, temos uma relação de muitos para muitos (N ):

Uma pessoa pode fazer de 1 a muitos cursos. Um curso pode ter de 1 a muitas pessoas. Ou seja, temos uma relação (N ), onde N representa o número de pessoas e M representa o número de cursos.

1 resposta

Olá! Tudo joia?

Vamos esclarecer a sua dúvida sobre o relacionamento entre pessoas e cursos. Pelo que você descreveu, estamos lidando com uma relação de muitos para muitos (N:M), onde:

  • Uma pessoa pode se matricular em vários cursos.
  • Um curso pode ter várias pessoas matriculadas.

Para implementar essa relação no Sequelize, utilizamos o método belongsToMany. Isso é feito criando uma tabela intermediária que armazena as chaves estrangeiras de ambas as tabelas envolvidas na relação. Vamos ver um exemplo prático de como fazer isso.

Primeiro, vamos definir os modelos Pessoa e Curso:

// modelo pessoa.js
module.exports = (sequelize, DataTypes) => {
  class Pessoa extends Model {
    static associate(models) {
      Pessoa.belongsToMany(models.Curso, {
        through: 'Matriculas',
        foreignKey: 'pessoaId'
      });
    }
  }
  Pessoa.init({
    nome: DataTypes.STRING,
    // outros atributos
  }, {
    sequelize,
    modelName: 'Pessoa',
  });
  return Pessoa;
};

// modelo curso.js
module.exports = (sequelize, DataTypes) => {
  class Curso extends Model {
    static associate(models) {
      Curso.belongsToMany(models.Pessoa, {
        through: 'Matriculas',
        foreignKey: 'cursoId'
      });
    }
  }
  Curso.init({
    titulo: DataTypes.STRING,
    // outros atributos
  }, {
    sequelize,
    modelName: 'Curso',
  });
  return Curso;
};

Neste exemplo, estamos utilizando o método belongsToMany para criar a relação muitos para muitos entre Pessoa e Curso. O parâmetro through define a tabela intermediária que será utilizada para armazenar as chaves estrangeiras.

Agora, precisamos criar o modelo para a tabela intermediária Matriculas:

// modelo matricula.js
module.exports = (sequelize, DataTypes) => {
  class Matricula extends Model {
    static associate(models) {
      // Associações podem ser definidas aqui, se necessário
    }
  }
  Matricula.init({
    pessoaId: {
      type: DataTypes.INTEGER,
      references: {
        model: 'Pessoas',
        key: 'id'
      }
    },
    cursoId: {
      type: DataTypes.INTEGER,
      references: {
        model: 'Cursos',
        key: 'id'
      }
    }
  }, {
    sequelize,
    modelName: 'Matricula',
  });
  return Matricula;
};

Com esses modelos definidos, você pode criar as migrações para gerar as tabelas no banco de dados. Após isso, as associações estarão configuradas e você poderá trabalhar com a relação muitos para muitos entre pessoas e cursos.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.