MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Melhor modelo para representar muitos para muitos relacionamentos com atributos no MongoDB


De muitas maneiras, a API do meteor incentiva documentos relacionais simples, no entanto, o MongoDB é um armazenamento de dados não relacional. Este conflito é, infelizmente, deixado como um exercício para o desenvolvedor resolver.

A noção de estrutura de esquema e junções é um tópico enorme para cobrir em uma única resposta, então tentarei ser o mais sucinto possível.

Motivos pelos quais você deve escolher um modelo relacional


Suponha que você tenha dados de comentários e publicações. Considere o que aconteceria se você incorporasse comentários em suas postagens.

  • O DDP opera em documentos. Todos os comentários serão enviados sempre que um novo comentário na mesma postagem for adicionado.

  • allow e deny regras operam em documentos. Pode não ser razoável esperar que as mesmas regras se apliquem simultaneamente a postagens e comentários.

  • As publicações tendem a fazer mais sentido em termos de coleções. No cenário acima, não poderíamos publicar facilmente uma lista de comentários independente de suas postagens.

  • Os bancos de dados relacionais existem por boas razões. Um deles é evitar o problema de modificação múltipla inerente à sua segunda solução.

Motivos pelos quais você deve escolher um modelo incorporado

  • As junções não são suportadas nativamente pelo MongoDB e não há um pacote principal para produzir uma junção reativa.

Recomendações


Use sua terceira solução. Na minha experiência, as razões para escolher um modelo relacional superam em muito as restrições impostas pelo armazenamento de dados. É claro que superar a falta de junções não é fácil, mas é provável que a dor esteja isolada em apenas um punhado de funções de publicação. Aqui estão alguns recursos que eu recomendo:

  • Como publicar um relacionamento muitos para muitos no EventedMind. Chris cobre seu caso de uso exato em detalhes, mas ele faz manualmente a junção reativa com callbacks de observação, o que eu não recomendo.

  • Reativo junta-se ao meteoro da Enciclopédia Discover Meteor. Isso abrange os conceitos básicos de como e por que se deve fazer uma junção reativa.

  • O capítulo de desnormalização do Discover Meteor. Isso abrange muitos dos pontos que fiz acima e também fala sobre quando e como desnormalizar alguns de seus dados.

  • Você pode usar Publicar com relações para juntar seus dados. Os pacotes alternativos incluem:publicação inteligente, publicação composta e publicação simples.

Se você precisar de mais informações além disso, por favor, comente abaixo e eu atualizarei minha resposta.