Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Duvida no relacionamento com Sequelize

Boa noite, pessoal.

Assistindo a aula me surgiu uma dúvida: Ao fazer o relacionamento sempre é passada a foreignKey, porém não foi passado o campo da outra tabela, por exemplo:

No model Matricula:

Matricula.hasMany(models.Pessoa, { foreignKey: 'estudante_id' });

No model Pessoa:

Pessoa.hasMany(models.Matricula, { foreignKey: 'estudante_id' });

Como o Sequelize sabe que "estudante_id" é "id" em pessoa? Ele sempre vai pegar a PK da tabela relacionada? Em complemento, é possível definir uma FK caso ela seja outro campo, exemplo se ao invés de id, a FK em matriculas fosse CPF? Caso não seja possível isso é um limitante do Sequelize ou do SGBD utilizado?

1 resposta
solução!

Boa tarde, Bety! Tudo joia?

Entendo sua dúvida, e é realmente um ponto interessante a ser discutido.

O Sequelize, por padrão, assume que a chave estrangeira (foreignKey) que você está definindo se relaciona com o campo 'id' na outra tabela. Isso acontece porque, na maioria dos casos, o 'id' é a chave primária (PK) da tabela e é comum usá-lo para criar relações entre as tabelas.

No entanto, você pode especificar um campo diferente para se relacionar, se necessário. Para isso, você pode usar a propriedade 'targetKey'. Por exemplo, se você quisesse que 'estudante_id' se relacionasse com o campo 'CPF' na tabela 'Pessoa', você poderia fazer algo assim:

Matricula.belongsTo(models.Pessoa, { foreignKey: 'estudante_id', targetKey: 'CPF' });

E, para o contrário, seria algo como:

Pessoa.hasMany(models.Matricula, { foreignKey: 'estudante_id', sourceKey: 'CPF' });

No exemplo acima, 'targetKey' e 'sourceKey' são usados para especificar o campo na outra tabela com o qual 'estudante_id' deve se relacionar.

Para mais informações, leia o seguinte trecho da documentação do Sequelize: Creating associations referencing a field which is not the primary key.

Então, para responder sua pergunta, não é uma limitação do Sequelize ou do SGBD, é apenas uma convenção comum usar o campo 'id' para relações, mas você tem a flexibilidade de especificar um campo diferente se necessário.

Espero ter ajudado e bons estudos!

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