sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB - Mange-til-mange forhold?

Det eksempel, du giver, til fælles med de fleste eksempler fra den virkelige verden på mange-til-mange-forhold, er faktisk et eksempel på et få-til-få forhold. Du kan have mange restauranter og mange spisende gæster, men sammenlignet med hele sættet har enhver given restaurant kun serveret en lille undergruppe af spisende gæster, og de fleste individuelle spisende gæster vil kun have besøgt en lille undergruppe af restauranterne. Det lyder som et tyndt forbundet netværk, hvor linkdensitetsforholdet er væsentligt under én.

Men du spurgte om mange-til-mange, så hvad med at bruge et neuralt netværk som eksempel? Neurale netværk danner ofte tætte netværk og repræsenterer således et ægte mange-til-mange netværk. I så fald er svaret nemt - brug ikke mongoDB. Brug tilpassede strukturer og serialiseringsstrategier skræddersyet til dine specifikke krav. Trods alt er ægte mange-til-mange-forhold næsten altid afvigende og retfærdiggør derfor specifik behandling.

Med det sagt, modellering af de mere sædvanlige få-til-få relation i mongoDB kan opnås uden at ofre den rige dokumentstruktur, og hvordan du opnår dette afhænger af dine adgangsmønstre.

Så med restaurant-/diner-netværkseksemplet, hvis du typisk vil forespørge en restaurant på dens spisesteder, vil du oprette en række diner_id'er, der holdes med hver restaurant. Den anden vej ville betyde en række restaurant_id'er, der afholdes med hver diner. Begge for to-vejs forespørgsel.

Der skal udvises forsigtighed, fordi der ikke er nogen fremmednøgle-begrænsning i mongoDB, og derfor er det dit ansvar at opretholde dine datas referenceintegritet.

Hvis ydeevne er vigtigst for dig, vil du måske indlejre dataene i hvert dokument i stedet for at henvise til det med et id. Dette er den højere ydeevne for læsning (ikke så meget til skrivning), da alle data kan trækkes fra disken i et enkelt hit. Det betyder, at du bliver nødt til at gøre mere arbejde, når du opdaterer dataværdier for at sikre integriteten af ​​dine data, men ofte er dette ikke så skræmmende, som det umiddelbart ser ud til. Hvor ofte skifter spisende gæster egentlig deres navne? Og afhængigt af dokumentstørrelserne vil du måske ikke nødvendigvis indlejre hele dokumentet, en delmængde af dataene plus et id, der peger på den fulde post, vil ofte gøre det trick.

Kort sagt bør mongoDB-skemadesign være drevet af applikationskravene. Forskellige skemaer til forskellige applikationer i modsætning til en monolitisk relationel DB til at styre dem alle. Hvad er virkeligheden af ​​dataene? Hvordan bruger applikationen egentlig disse data? Hvor store er de dokumentobjekter, der gemmes? Besvar disse spørgsmål, og dit skema vil praktisk talt designe sig selv.



  1. Spring data mongodb fjerner en egenskab fra et dokument ved hjælp af MongoTemplate

  2. Mongodb - Hvordan finder man streng i flere felter?

  3. Hvordan kan jeg implementere tilladelser på feltniveau til MongoDB?

  4. Mulighed for at køre MongoDB på Linode 512 VPS?