MongoDB je databáza dokumentov a neudržiava vzťahy medzi dokumentmi, ako sú relačné databázy, ako napríklad PostgreSQL.

Napriek tomu vám MongoDB umožňuje vytvárať vzťahy medzi dokumentmi. Tieto vzťahy môžu byť modelované pomocou vstavaných alebo referenčných prístupov. Poďme sa na to pozrieť bližšie.

Vložené vzťahy vs. Referenčné vzťahy

Pri integrovanom prístupe je dokument priamo vložený do iného dokumentu, výsledkom čoho sú vnorené údaje. Proces sa nazýva aj „denormalizácia“.

Referenčný prístup na druhej strane používa odkazy na dokumenty, ktoré odkazujú z jedného dokumentu na druhý. Tento prístup sa nazýva aj „normalizácia“.

MongoDB: Vzťahy jeden k jednému s vloženými dokumentmi

Pomocou vstavaného prístupu môžete vytvoriť vzťah jedna k jednej medzi dokumentmi. Tento vzťah sa vyskytuje, keď jeden objekt dokumentu môže súvisieť iba s jedným iným dokumentom.

Zvážte databázu študentov. Táto databáza obsahuje zbierky študentov a adries s nasledujúcimi dokumentmi.

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

"phoneNumber": "987654321",
};
// Adresný dokument
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"mesto": "Hobiton",
}

V tejto databáze môže mať študent iba jednu adresu. Ak chcete získať adresu, budete musieť požiadať o zbierku adries pomocou mena študenta.

Súvisiace: Ako vytvoriť databázu a kolekciu v MongoDB

V prípadoch, keď sa adresa používa v tandeme s ďalšími podrobnosťami, ako napr meno študenta, budete musieť dopytovať databázu viackrát. Nevýhodou je vysoký počet operácií čítania a následne nízky výkon dotazov.

Pomocou integrovaného prístupu môžete vložiť údaje o adrese priamo do dokumentu študenta a na získanie údajov použiť iba jeden dotaz.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"adresa": [{
"street": "Bagshot Row",
"mesto": "Hobiton"
}],
};

Ak chcete získať adresu prostredníctvom meno študenta, použite tento dotaz.

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

Vzťahy typu One-to-Many s vloženými dokumentmi v MongoDB

Predstavte si situáciu, keď má študent viacero adries. Vzťah medzi študentom a adresami sa stáva jedným z mnohých.

Vložený model umožňuje pridať do študentského dokumentu viacero adries. Rovnako ako vo vzťahu jedna k jednej s použitím vložených dokumentov má tento prístup relatívne vysoký výkon dotazov.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"adresa": [
{
"street": "Bagshot Row",
"mesto": "Hobiton"
},
{
"street": "Ďalší rad na ranu",
"city": "Hobiton2"
},
]
};

Dotaz nižšie vráti adresy zadaného mena študenta.

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

Súvisiace: Ako vytvárať dokumenty v MongoDB

Ak máte teraz viac adries a neustále ich pridávate do poľa adresy, dokument sa môže veľmi rýchlo zaplniť. Jedným z riešení je použitie odkazov na dokumenty.

MongoDB: Vzťahy jeden k mnohým s odkazmi na dokumenty

Pomocou referenčného prístupu môžete modelovať aj vzťah typu one-to-many. V tomto dátovom modeli budú údaje o študentovi a adrese uchovávané v oddelených zbierkach. Ak chcete priradiť študenta k jeho adrese, pridajte do dokumentu študenta pole obsahujúce ID adresy.

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

Získanie podrobností o adrese študenta zahŕňa načítanie ID adries z dokumentu študenta a použitie týchto ID na načítanie skutočných adries z kolekcie.

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

Výber medzi vstavaným a referenčným prístupom

Vkladací aj referenčný model majú svoje pre a proti a pred výberom budete musieť zvážiť niekoľko vecí. Na začiatok budete musieť zvážiť prípad použitia. Ak sa údaje budú týkať iba jedného dokumentu, vkladanie môže byť vašou najlepšou voľbou.

Ak chcete vytvoriť vzťahy typu one-to-many, môžete použiť buď model odkazovania, alebo vložený model. Výsledkom odkazovania je čistý a konzistentný dokument, pretože pridáte iba referenčné ID dokumentu, ku ktorému sa chcete vzťahovať.

Počet operácií čítania potrebných na získanie pripojených údajov je však relatívne vysoký a môže ovplyvniť výkon. Vloženie dokumentu môže zvýšiť výkon, ale s mnohými vnorenými dokumentmi môžete skončiť s preťaženou kolekciou.

Výber spôsobu implementácie dátových vzťahov vo vašom dokumente je preto úplne na vás. Zvážte, ako budete dokument používať, úroveň výkonu dotazu, na ktorú sa zameriavate, a kompromisy, ktoré ste ochotní urobiť.

Ako sa líši modelovanie údajov v MongoDB?

Uvažujete o inom prístupe k databázam? Tu je návod, ako funguje dátové modelovanie v MongoDB.

Prečítajte si ďalej

zdieľamTweetujteEmail
Súvisiace témy
  • Programovanie
  • Programovanie
  • databázy
O autorovi
Mary Gathoni (4 články zverejnené)

Mary Gathoni je softvérová vývojárka s vášňou pre vytváranie technického obsahu, ktorý je nielen informatívny, ale aj pútavý. Keď práve nekóduje alebo nepíše, rada sa stretáva s priateľmi a je vonku.

Viac od Mary Gathoni

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber