MongoDB je databáze dokumentů a neudržuje vztahy mezi dokumenty, jako jsou relační databáze, jako je PostgreSQL.

Přesto vám MongoDB umožňuje vytvářet vztahy mezi dokumenty. Tyto vztahy mohou být modelovány pomocí vložených nebo odkazovaných přístupů. Pojďme se na to podívat blíže.

Embedded Relationships vs. Referenční vztahy

Ve vloženém přístupu je dokument přímo vložen do jiného dokumentu, což vede k vnořeným datům. Proces se také nazývá „denormalizace“.

Referenční přístup na druhé straně používá odkazy na dokumenty k tomu, aby ukazovaly z jednoho dokumentu na druhý. Tento přístup se také nazývá „normalizace“.

MongoDB: One-to-One vztahy s vloženými dokumenty

Pomocí integrovaného přístupu můžete vytvořit vztah jedna ku jedné mezi dokumenty. K tomuto vztahu dochází, když se jeden objekt dokumentu může vztahovat pouze k jednomu jinému dokumentu.

Zvažte databázi studentů. Tato databáze obsahuje sbírky studentů a adres s následujícími dokumenty.

// Studentský dokument
{
"studentName": "Frodo Pytlík",
instagram viewer

"phoneNumber": "987654321",
};
// Adresní dokument
{
"studentName": "Frodo Pytlík",
"street": "Bagshot Row",
"city": "Hobiton",
}

V této databázi může mít student pouze jednu adresu. Chcete-li získat adresu, budete muset zadat dotaz na sbírku adres pomocí jména studenta.

Příbuzný: Jak vytvořit databázi a kolekci v MongoDB

V případech, kdy je adresa použita v tandemu s dalšími detaily, jako je a jméno studenta, budete muset databázi dotazovat vícekrát. Nevýhodou je vysoký počet operací čtení a následně nízký výkon dotazů.

Pomocí integrovaného přístupu můžete vložit data adresy přímo do dokumentu studenta a k získání dat použít pouze jeden dotaz.

{
"studentName": "Frodo Pytlík",
"phoneNumber": "987654321",
"adresa": [{
"street": "Bagshot Row",
"město": "Hobiton"
}],
};

Chcete-li získat adresu prostřednictvím jméno studenta, použijte tento dotaz.

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

Vztahy One-to-Many s vloženými dokumenty v MongoDB

Zvažte situaci, kdy má student více adres. Vztah mezi studentem a adresami se stává jedním z mnoha.

Vložený model umožňuje přidat do studentského dokumentu více adres. Stejně jako ve vztahu jeden k jednomu pomocí vložených dokumentů má tento přístup relativně vysoký výkon dotazů.

{
"studentName": "Frodo Pytlík",
"phoneNumber": "987654321",
"adresa": [
{
"street": "Bagshot Row",
"město": "Hobiton"
},
{
"street": "Další řada výstřelů",
"city": "Hobiton2"
},
]
};

Dotaz níže vrátí adresy zadaného jména studenta.

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

Příbuzný: Jak vytvářet dokumenty v MongoDB

Nyní, pokud máte více adres a neustále je přidáváte do adresního pole, může být dokument velmi rychle přeplněný. Jedním z řešení je použití odkazů na dokumenty.

MongoDB: Vztahy jeden k mnoha s odkazy na dokumenty

Můžete také modelovat vztah jedna k mnoha pomocí referenčního přístupu. V tomto datovém modelu budou údaje o studentech a adresách udržovány v oddělených kolekcích. Chcete-li přiřadit studenta k jeho adrese, přidejte do dokumentu studenta pole obsahující ID adresy.

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

Získání podrobností o adrese studenta zahrnuje načtení ID adres z dokumentu studenta a použití těchto ID k načtení skutečných adres z kolekce.

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

Výběr mezi vestavěným a referenčním přístupem

Vkládací i referenční modely mají své klady a zápory a než se rozhodnete, budete muset zvážit několik věcí. Pro začátek budete muset zvážit případ použití. Pokud se data budou týkat pouze jednoho dokumentu, může být vložení vaší nejlepší volbou.

Chcete-li vytvořit vztahy jedna k mnoha, můžete použít buď referenční model, nebo vložený model. Výsledkem odkazování je čistý a konzistentní dokument, protože přidáte pouze referenční ID dokumentu, ke kterému se chcete vztahovat.

Počet operací čtení potřebných k načtení připojených dat je však relativně vysoký a může ovlivnit výkon. Vložení dokumentu může zvýšit výkon, ale s mnoha vnořenými dokumenty můžete skončit s přetíženou kolekcí.

Výběr způsobu implementace datových vztahů ve vašem dokumentu je tedy zcela na vás. Zvažte, jak budete dokument používat, úroveň výkonu dotazu, na kterou se zaměřujete, a kompromisy, které jste ochotni udělat.

Jak se liší datové modelování v MongoDB?

Uvažujete o jiném přístupu k databázím? Zde je návod, jak funguje datové modelování v MongoDB.

Přečtěte si další

PodíltweetE-mailem
Související témata
  • Programování
  • Programování
  • databáze
O autorovi
Mary Gathoni (4 články zveřejněny)

Mary Gathoni je vývojář softwaru s vášní pro vytváření technického obsahu, který je nejen informativní, ale také poutavý. Když zrovna nekóduje nebo nepíše, ráda se poflakuje s přáteli a je venku.

Více od Mary Gathoni

Přihlaste se k odběru našeho newsletteru

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!

Chcete-li se přihlásit k odběru, klikněte sem