MongoDB je zbirka podatkov dokumentov in ne vzdržuje odnosov med dokumenti, kot so relacijske baze podatkov, kot je PostgreSQL.

Kljub temu vam MongoDB omogoča ustvarjanje odnosov med dokumenti. Te odnose je mogoče modelirati z vgrajenimi ali referenčnimi pristopi. Poglejmo si podrobneje.

Vgrajena razmerja vs. Referenčna razmerja

Pri vgrajenem pristopu je dokument neposredno vstavljen v drug dokument, kar ima za posledico ugnezdene podatke. Postopek se imenuje tudi "denormalizacija".

Po drugi strani referenčni pristop uporablja reference na dokumente za usmerjanje iz enega dokumenta v drugega. Ta pristop se imenuje tudi "normalizacija".

MongoDB: razmerja ena proti ena z vdelanimi dokumenti

Z vgrajenim pristopom lahko ustvarite razmerje ena proti ena med dokumenti. Ta odnos se pojavi, ko se en predmet dokumenta lahko nanaša samo na en drugi dokument.

Razmislite o študentski bazi podatkov. Ta zbirka podatkov vsebuje zbirke študentov in naslovov z naslednjimi dokumenti.

// Študentski dokument
{
"studentName": "Frodo Baggins",
instagram viewer

"telefonska številka": "987654321",
};
// Naslovni dokument
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"mesto": "Hobiton",
}

V tej bazi ima študent dovoljen samo en naslov. Če želite pridobiti naslov, boste morali poizvedovati v zbirki naslovov z imenom študenta.

Povezano: Kako ustvariti bazo podatkov in zbirko v MongoDB

V primerih, ko se naslov uporablja skupaj z drugimi podrobnostmi, kot je a študentsko ime, boste morali večkrat poizvedovati po bazi podatkov. Slaba stran tega je veliko število bralnih operacij in posledično nizka zmogljivost poizvedbe.

Z vgrajenim pristopom lahko podatke o naslovu vstavite neposredno v študentski dokument in za pridobitev podatkov uporabite samo eno poizvedbo.

{
"studentName": "Frodo Baggins",
"telefonska številka": "987654321",
"naslov": [{
"street": "Bagshot Row",
"mesto": "Hobiton"
}],
};

Za pridobitev naslova prek študentsko ime, uporabite to poizvedbo.

db.student.findOne({"studentName":"Frodo Baggins"}, {"naslov":1})

Razmerja ena proti več z vdelanimi dokumenti v MongoDB

Razmislite o situaciji, ko ima študent več naslovov. Razmerje med študentom in naslovi postane ena proti več.

Vgrajeni model vam omogoča, da študentskemu dokumentu dodate več naslovov. Tako kot pri razmerju ena proti ena z uporabo vdelanih dokumentov ima ta pristop razmeroma visoko zmogljivost poizvedbe.

{
"studentName": "Frodo Baggins",
"telefonska številka": "987654321",
"naslov": [
{
"street": "Bagshot Row",
"mesto": "Hobiton"
},
{
"street": "Another Bagshot Row",
"mesto": "Hobiton2"
},
]
};

Spodnja poizvedba bo vrnila naslove določenega imena študenta.

db.student.findOne({studentName: “Frodo Baggins”}, {naslov: 1})

Povezano: Kako ustvariti dokumente v MongoDB

Zdaj, če imate več naslovov in jih nenehno dodajate v naslovno polje, se lahko dokument precej hitro zamaši. Ena od rešitev je uporaba referenc dokumentov.

MongoDB: razmerja ena proti več s referencami dokumentov

Z referenčnim pristopom lahko modelirate tudi razmerje ena proti več. V tem podatkovnem modelu se bodo podatki o študentih in naslovih hranili v ločenih zbirkah. Če želite študenta povezati z njegovim naslovom, dodajte polje z ID-ji naslovov v študentski dokument.

{
"studentName": "Frodo Baggins",
"telefonska številka": "987654321",
"naslov": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};

Pridobivanje podrobnosti o naslovu študenta vključuje pridobivanje ID-jev naslovov iz študentskega dokumenta in uporabo teh ID-jev za pridobivanje dejanskih naslovov iz zbirke.

const student = db.users.findOne({"name":"Frodo Baggins"},{"naslov":1})
const naslovi = db.address.find({"_id":{"$in":student["address_ids"]}})

Izbira med vgrajenim in referenčnim pristopom

Tako model za vdelavo kot referenciranje imata svoje prednosti in slabosti, zato boste morali razmisliti o nekaj stvareh, preden se odločite. Za začetek boste morali upoštevati primer uporabe. Če bodo podatki povezani samo z enim dokumentom, bi lahko bila vdelava najboljša možnost.

Če želite ustvariti odnose ena proti več, lahko uporabite referenčni model ali vdelani model. Rezultat sklicevanja je čist in dosleden dokument, saj dodate samo referenčni ID dokumenta, s katerim se želite povezati.

Vendar je število bralnih operacij, potrebnih za pridobivanje povezanih podatkov, relativno veliko in lahko vpliva na zmogljivost. Vdelava dokumenta lahko poveča zmogljivost, toda pri številnih ugnezdenih dokumentih boste morda na koncu imeli preobremenjeno zbirko.

Izbira načina implementacije podatkovnih razmerij v dokumentu je torej v celoti odvisna od vas. Razmislite o tem, kako boste uporabljali dokument, stopnjo uspešnosti poizvedbe, ki jo želite, in kompromise, ki ste jih pripravljeni sprejeti.

Kako se modeliranje podatkov razlikuje v MongoDB?

Razmišljate o drugačnem pristopu do podatkovnih baz? Tukaj je, kako deluje modeliranje podatkov v MongoDB.

Preberite Naprej

DelitiTweetE-naslov
Povezane teme
  • Programiranje
  • Programiranje
  • bazo podatkov
O avtorju
Mary Gathoni (Objavljeni 4 članki)

Mary Gathoni je razvijalka programske opreme s strastjo do ustvarjanja tehničnih vsebin, ki niso le informativne, ampak tudi privlačne. Ko ne kodira ali piše, uživa v druženju s prijatelji in na prostem.

Več od Mary Gathoni

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!

Kliknite tukaj, da se naročite