Como faço para projetar um esquema como este no MongoDB? Acho que não há chaves estrangeiras!
sql
mongodb
foreign-keys
nosql
Mark Pegasov
fonte
fonte
Respostas:
Você pode estar interessado em usar um ORM como Mongoid ou MongoMapper.
http://mongoid.org/docs/relations/referenced/1-n.html
Em um banco de dados NoSQL como o MongoDB, não há 'tabelas', mas coleções. Os documentos são agrupados em Coleções. Você pode ter qualquer tipo de documento - com qualquer tipo de dados - em uma única coleção. Basicamente, em um banco de dados NoSQL, cabe a você decidir como organizar os dados e suas relações, se houver.
O que o Mongoid e o MongoMapper fazem é fornecer métodos convenientes para configurar relações com bastante facilidade. Confira o link que te dei e pergunte qualquer coisa.
Editar:
No mongoid, você escreverá seu esquema assim:
Editar:
Você pode usar esse ObjectId para fazer relações entre documentos.
fonte
Primeiro, para esclarecer algumas convenções de nomenclatura. MongoDB usa em
collections
vez detables
.Pegue o seguinte modelo:
Claramente, a lista de cursos de Jane aponta para alguns cursos específicos. O banco de dados não aplica nenhuma restrição ao sistema (por exemplo : restrições de chave estrangeira ), portanto, não há "exclusões em cascata" ou "atualizações em cascata". No entanto, o banco de dados contém as informações corretas.
Além disso, o MongoDB possui um padrão DBRef que ajuda a padronizar a criação dessas referências. Na verdade, se você der uma olhada nesse link, ele tem um exemplo semelhante.
Para ser claro, o MongoDB não é relacional. Não existe uma "forma normal" padrão. Você deve modelar seu banco de dados de acordo com os dados armazenados e as consultas que pretende executar.
fonte
Podemos definir o chamado
foreign key
no MongoDB. No entanto, precisamos manter a integridade dos dados POR NÓS MESMOS . Por exemplo,O
courses
campo contém_id
s de cursos. É fácil definir um relacionamento um para muitos. No entanto, se quisermos recuperar os nomes dos cursos do alunoJane
, precisamos realizar outra operação para recuperar ocourse
documento via_id
.Se o curso
bio101
for removido, precisamos realizar outra operação para atualizar ocourses
campo nostudent
documento.Mais: Projeto de esquema do MongoDB
A natureza do tipo de documento do MongoDB oferece suporte a maneiras flexíveis de definir relacionamentos. Para definir uma relação um-para-muitos:
Documento embutido
Exemplo:
Referência infantil
Como o
student
/course
exemplo acima.Referência parental
Adequado para um para squillions, como mensagens de log.
Virtualmente, a
host
é o pai de alogmsg
. Fazer referência aohost
id economiza muito espaço, visto que as mensagens de log são quilhões.Referências:
fonte
Do livro The Little MongoDB
Assim,
Se for um dado API RESTful, substitua o ID do curso por um link GET para o recurso do curso
fonte
O objetivo de ForeignKey é evitar a criação de dados se o valor do campo não corresponder a sua ForeignKey. Para fazer isso no MongoDB, usamos middlewares Schema que garantem a consistência dos dados.
Por favor, dê uma olhada na documentação. https://mongoosejs.com/docs/middleware.html#pre
fonte