1
resposta

Relacoes entre Schemas em NoSQL

Estudando MongoDB me deparei com uma situacao a qual nao gostei, porem apos refletir um pouco eu cheguei a conclusao de que poderia ser um dos principais diferenciais de utilizar bases NoSQL no lugar de SQLs.

Quando eu crio uma relacao de schemas 1xn no exemplo

  • 1 Autor pode ter N livros (hasMany)
  • um livro pertence apenas a um autor (belongsTo)

Se eu lancar apenas um lado da verdade ao criar meus objetos:

//criar novo Livro
{
    "autor": 12345678,
    "titulo": "Hobbit",
    ...
}

Eu consigo obter o autor atraves do livro livro.autor.nome

Porem se eu instancio o autor numa variavel e tento acessar o array de livros, vai me retornar vazio pois na base NoSQL cada documento e independente

let autor = Autor.findById(12345678)
console.log(autor.livros)
// retorna []

Caso eu queira que essa relacao funcione em ambos lados, sou obrigado a declarar no documento do autor o array de livros que os pertence

// PUT autores/12345678
{
    "books": ["55555555", "666666666"]
    ...
}

E entao quando eu quiser obter os relacionamentos eu consigo, acessando diretamente o documento sem precisar utilizar recursos do servidor em comparacao a uma base SQL

E assim que deveria ser o NoSQL? faz sentido o que estou dizendo? Alguem me poderia dar um norte a respeito do tema?

1 resposta

Oi Jorge, tudo bem? Não sei se entendi bem a sua pergunta, mas a parte de relacionamentos, você está correto, para ter uma relação bidirecional, ou seja, você conseguir acessar informações do autor a partir do livro e a partir do livro, acessar informações do autor, você precisa de algo que relacione os dois, mas não necessariamente nas duas coleções. Você pode sim, ter apenas o identificado do autor no registro dos livros, só que a forma como você vai buscar as informações deve mudar um pouco.

Agora, o que acredito que seja o caso é que o Mongoose, esteja carregando as informações de forma antecipada, ele reconhece os relacionamentos e por estar definido dos dois lados, ele carrega os dados das duas coleções sempre. O que pode ser um problema, por que não necessariamente sempre, você vai precisar que isso seja feito.

O NoSQL vai além disso, o Mongo é apenas uma das possibilidades de NoSQL, que é um banco baseado em documentos. Existem outras possibilidades, bancos baseado de grafos e outras estruturas que não seguem as estruturas do SQL padrão.