sql >> Database >  >> NoSQL >> MongoDB

Beste model voor het vertegenwoordigen van veel tot veel relaties met attributen in MongoDB

In veel opzichten stimuleert de API van meteor platte relationele documenten, maar MongoDB is een niet-relationele gegevensopslag. Dit conflict wordt helaas overgelaten als een oefening voor de ontwikkelaar om op te lossen.

Het begrip schemastructuur en joins is een enorm onderwerp om in één antwoord te behandelen, dus ik zal proberen zo beknopt mogelijk te zijn.

Redenen waarom u een relationeel model zou moeten kiezen

Stel dat je commentaar- en postgegevens hebt. Bedenk wat er zou gebeuren als je opmerkingen in je berichten zou insluiten.

  • DDP werkt op documenten. Alle opmerkingen worden verzonden telkens wanneer een nieuwe opmerking in hetzelfde bericht wordt toegevoegd.

  • allow en deny regels werken op documenten. Het is misschien onredelijk om te verwachten dat dezelfde regels tegelijkertijd gelden voor zowel posts als reacties.

  • Publicaties hebben de neiging om logischer te zijn in termen van collecties. In het bovenstaande scenario konden we niet gemakkelijk een lijst met opmerkingen publiceren, onafhankelijk van hun berichten.

  • Relationele databases bestaan ​​om goede redenen. Een daarvan is het vermijden van het probleem met meerdere wijzigingen dat inherent is aan uw tweede oplossing.

Redenen waarom u een ingesloten model zou moeten kiezen

  • Joins worden niet standaard ondersteund door MongoDB en er is geen kernpakket om een ​​reactieve join te produceren.

Aanbevelingen

Gebruik je derde oplossing. In mijn ervaring wegen de redenen om voor een relationeel model te kiezen ruimschoots op tegen de beperkingen die door de gegevensopslag worden opgelegd. Natuurlijk is het niet eenvoudig om het gebrek aan joins te overwinnen, maar de pijn zal waarschijnlijk worden beperkt tot slechts een handvol publicatiefuncties. Hier zijn enkele bronnen die ik ten zeerste zou aanbevelen:

  • Hoe u een veel-op-veel-relatie publiceert op EventedMind. Chris behandelt je exacte use-case in detail, maar hij doet handmatig de reactieve join met observerende callbacks, wat ik niet aanraad.

  • Reactive sluit zich aan bij meteoor uit de Discover Meteor Encyclopedia. Dit behandelt de basisprincipes van hoe en waarom men een reactieve join zou moeten doen.

  • Het denormalisatiehoofdstuk van Discover Meteor. Dit behandelt veel van de punten die ik hierboven heb gemaakt en gaat ook over wanneer en hoe je sommige van je gegevens kunt denormaliseren.

  • U kunt Publiceren met relaties gebruiken om uw gegevens samen te voegen. Alternatieve pakketten zijn onder meer:​​slim publiceren, samengesteld publiceren en eenvoudig publiceren.

Als je meer informatie nodig hebt, kun je hieronder reageren en ik zal mijn antwoord bijwerken.



  1. mongodb groepeer waarden op meerdere velden

  2. Rails + MongoMapper + EmbeddedDocument formulier hulp

  3. Wat is het verschil tussen Spring Data MongoDB en Hibernate OGM voor MongoDB?

  4. Module socket niet gevonden lua