MongoDB je baza podataka dokumenata i ne održava odnose između dokumenata kao što su relacijske baze podataka kao što je PostgreSQL.

Ipak, MongoDB vam omogućuje stvaranje odnosa između dokumenata. Ovi se odnosi mogu modelirati putem ugrađenih ili referentnih pristupa. Pogledajmo pobliže.

Ugrađeni odnosi vs. Referentni odnosi

U ugrađenom pristupu, dokument se izravno umeće unutar drugog dokumenta, što rezultira ugniježđenim podacima. Proces se također naziva "denormalizacija".

Referentni pristup, s druge strane, koristi reference dokumenta za usmjeravanje s jednog dokumenta na drugi. Ovaj pristup se također naziva "normalizacija".

MongoDB: Odnosi jedan na jedan s ugrađenim dokumentima

Pomoću ugrađenog pristupa možete stvoriti odnos jedan-na-jedan između dokumenata. Ovaj odnos se događa kada se jedan objekt dokumenta može odnositi samo na jedan drugi dokument.

Razmotrite bazu podataka studenata. Ova baza podataka sadrži zbirke učenika i adresa sa sljedećim dokumentima.

// Studentska isprava
{
"studentName": "Frodo Baggins",
instagram viewer

"telefonski broj": "987654321",
};
// Adresni dokument
{
"studentName": "Frodo Baggins",
"ulica": "Bagshot Row",
"grad": "Hobiton",
}

U ovoj bazi podataka studentu je dopušteno imati samo jednu adresu. Da biste dohvatili adresu, morat ćete postaviti upit za zbirku adresa koristeći ime učenika.

Povezano: Kako stvoriti bazu podataka i kolekciju u MongoDB-u

U slučajevima kada se adresa koristi zajedno s drugim detaljima kao što su a ime studenta, morat ćete više puta tražiti bazu podataka. Nedostatak toga je veliki broj operacija čitanja i posljedično niska izvedba upita.

Koristeći ugrađeni pristup, podatke o adresi možete umetnuti izravno u studentski dokument i koristiti samo jedan upit za dobivanje podataka.

{
"studentName": "Frodo Baggins",
"telefonski broj": "987654321",
"adresa": [{
"ulica": "Bagshot Row",
"grad": "Hobiton"
}],
};

Za dohvaćanje adrese putem ime studenta, koristite ovaj upit.

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

Odnosi jedan prema više s ugrađenim dokumentima u MongoDB

Razmotrite situaciju u kojoj učenik ima više adresa. Odnos između učenika i adresa postaje jedan prema više.

Ugrađeni model omogućuje vam dodavanje više adresa u studentski dokument. Kao i u odnosu jedan na jedan koji koristi ugrađene dokumente, ovaj pristup ima relativno visoku izvedbu upita.

{
"studentName": "Frodo Baggins",
"telefonski broj": "987654321",
"adresa": [
{
"ulica": "Bagshot Row",
"grad": "Hobiton"
},
{
"ulica": "Još jedan red za Bagshot",
"grad": "Hobiton2"
},
]
};

Upit u nastavku će vratiti adrese navedenog studentskog imena.

db.student.findOne({ime učenika: “Frodo Baggins”}, {adresa: 1})

Povezano: Kako stvoriti dokumente u MongoDB-u

Sada, ako imate više adresa i nastavljate ih dodavati u polje adrese, dokument se može prilično brzo zatrpati. Jedno rješenje je korištenje referenci dokumenata.

MongoDB: Odnosi jedan na više s referencama dokumenata

Također možete modelirati odnos jedan-prema-više koristeći referentni pristup. U ovom modelu podataka, podaci o učenicima i adresama čuvat će se u zasebnim zbirkama. Da povežete učenika s njegovom adresom, dodajte polje koje sadrži ID adrese u studentski dokument.

{
"studentName": "Frodo Baggins",
"telefonski broj": "987654321",
"adresa": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};

Dobivanje podataka o adresi učenika uključuje dohvaćanje ID-ova adresa iz studentskog dokumenta i korištenje tih ID-ova za dohvaćanje stvarnih adresa iz zbirke.

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

Odabir između ugrađenog i referentnog pristupa

I model ugrađivanja i model referenciranja imaju svoje prednosti i nedostatke i morat ćete razmotriti nekoliko stvari prije nego što se odlučite. Za početak, morat ćete razmotriti slučaj upotrebe. Ako će se podaci odnositi samo na jedan dokument, ugradnja bi mogla biti vaša najbolja opcija.

Za stvaranje odnosa jedan-prema-više, možete koristiti ili referentni model ili ugrađeni model. Referenca rezultira čistim i dosljednim dokumentom jer dodajete samo referentni ID dokumenta s kojim se želite povezati.

Međutim, broj operacija čitanja potrebnih za dohvaćanje povezanih podataka relativno je velik i može utjecati na performanse. Ugrađivanje dokumenta može povećati performanse, ali s mnogim ugniježđenim dokumentima možete završiti s zagušenom zbirkom.

Stoga odabir načina implementacije odnosa podataka u vašem dokumentu u potpunosti ovisi o vama. Razmislite kako ćete koristiti dokument, razinu izvedbe upita kojoj težite i kompromise koje ste spremni napraviti.

Kako se modeliranje podataka razlikuje u MongoDB-u?

Razmišljate o drugačijem pristupu bazama podataka? Evo kako funkcionira modeliranje podataka u MongoDB-u.

Pročitajte dalje

UdioCvrkutE-mail
Povezane teme
  • Programiranje
  • Programiranje
  • baza podataka
O autoru
Mary Gathoni (Objavljena 4 članka)

Mary Gathoni je programerica softvera sa strašću za stvaranje tehničkog sadržaja koji nije samo informativan nego i privlačan. Kad ne kodira i ne piše, uživa u druženju s prijateljima i na otvorenom.

Više od Mary Gathoni

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu