MongoDB on dokumentide andmebaas ja see ei säilita dokumentide vahel seoseid, nagu relatsiooniandmebaasid, nagu PostgreSQL.
Siiski võimaldab MongoDB teil dokumentide vahel suhteid luua. Neid seoseid saab modelleerida kas manustatud või viidatud lähenemisviiside abil. Vaatame lähemalt.
Manustatud suhted vs. Võrdlussuhted
Manustatud lähenemisviisi korral sisestatakse dokument otse teise dokumenti, mille tulemuseks on pesastatud andmed. Seda protsessi nimetatakse ka "denormaliseerimiseks".
Võrdlusviis seevastu kasutab dokumendiviiteid, et osutada ühelt dokumendilt teisele. Seda lähenemist nimetatakse ka "normaliseerimiseks".
MongoDB: üks-ühele suhted manustatud dokumentidega
Manustatud lähenemisviisi abil saate dokumentide vahel luua üks-ühele seose. See seos tekib siis, kui üks dokumendiobjekt saab olla seotud ainult ühe teise dokumendiga.
Mõelge õpilaste andmebaasile. See andmebaas sisaldab õpilaste ja aadresside kogusid järgmiste dokumentidega.
// Õpilasdokument
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
};
// Aadressidokument
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"linn": "Hobiton",
}
Selles andmebaasis on üliõpilasel lubatud olla ainult üks aadress. Aadressi toomiseks peate esitama päringu aadressikogust, kasutades õpilase nime.
Seotud: Kuidas luua andmebaasi ja kogu MongoDB-s
Juhtudel, kui aadressi kasutatakse koos muude üksikasjadega, näiteks a õpilase nimi, peate andmebaasist mitu korda päringuid tegema. Selle negatiivne külg on lugemistoimingute suur arv ja sellest tulenevalt madal päringu jõudlus.
Manustatud lähenemisviisi kasutades saate aadressiandmed otse õpilasdokumenti sisestada ja andmete hankimiseks kasutada ainult ühte päringut.
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"aadress": [{
"street": "Bagshot Row",
"linn": "Hobiton"
}],
};
Aadressi hankimiseks läbi õpilase nimi, kasutage seda päringut.
db.student.findOne({"õpilase nimi":"Frodo Baggins"}, {"aadress":1})
Üks-mitmele suhted manustatud dokumentidega MongoDB-s
Mõelge olukorrale, kus õpilasel on mitu aadressi. Suhe õpilase ja aadresside vahel muutub üks-mitmele.
Manustatud mudel võimaldab õpilasdokumendile lisada mitu aadressi. Nagu manustatud dokumente kasutava üks-ühele suhte puhul, on sellel lähenemisviisil suhteliselt kõrge päringu jõudlus.
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"aadress": [
{
"street": "Bagshot Row",
"linn": "Hobiton"
},
{
"street": "Another Bagshot Row",
"linn": "Hobiton2"
},
]
};
Allolev päring tagastab määratud õpilase nimega aadressid.
db.student.findOne({õpilase nimi: "Frodo Baggins"}, {aadress: 1})
Seotud: Kuidas MongoDB-s dokumente luua
Nüüd, kui teil on rohkem aadresse ja lisate neid pidevalt aadressiväljale, võib dokument üsna kiiresti segamini minna. Üks lahendus on kasutada dokumendiviiteid.
MongoDB: üks-mitmele suhted dokumendiviidetega
Võrdlusmeetodi abil saate modelleerida ka üks-mitmele seost. Selles andmemudelis hoitakse õpilaste ja aadresside andmeid eraldi kogudes. Õpilase seostamiseks tema aadressiga lisage õpilasdokumendile aadressi ID-sid sisaldav väli.
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"aadress": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId ("61fa7d19ebdadf8ac71427eb")
]
};
Õpilase aadressiandmete hankimine hõlmab aadressi ID-de toomist õpilasdokumendist ja nende ID-de kasutamist kogust tegelike aadresside toomiseks.
const õpilane = db.users.findOne({"nimi":"Frodo Baggins"},{"aadress":1})
const aadressid = db.aadress.find({"_id":{"$in":õpilane["aadressi_id"]}})
Manustatud ja võrdluslähenemise vahel valimine
Nii manustamis- kui ka viitamismudelitel on oma plussid ja miinused ning enne valiku tegemist peate arvestama paari asjaga. Alustuseks peate kaaluma kasutusjuhtumit. Kui andmed on seotud ainult ühe dokumendiga, võib manustamine olla teie parim valik.
Üks-mitmele suhete loomiseks võite kasutada kas viitemudelit või manustatud mudelit. Viitamise tulemuseks on puhas ja järjepidev dokument, kuna lisate ainult selle dokumendi viite ID, millega soovite seostada.
Ühendatud andmete toomiseks vajalike lugemistoimingute arv on aga suhteliselt suur ja võib jõudlust mõjutada. Dokumendi manustamine võib jõudlust suurendada, kuid paljude pesastatud dokumentide korral võib kogumik olla ülekoormatud.
Seetõttu on teie otsustada, kuidas oma dokumendis andmesuhteid rakendada. Mõelge sellele, kuidas te dokumenti kasutate, millist päringu jõudluse taset soovite saavutada ja milliseid kompromisse olete nõus tegema.
Kas kaalute teistsugust lähenemist andmebaasidele? Siit saate teada, kuidas andmete modelleerimine MongoDB-s töötab.
Loe edasi
- Programmeerimine
- Programmeerimine
- andmebaasi
Mary Gathoni on tarkvaraarendaja, kelle kirg on luua tehnilist sisu, mis pole mitte ainult informatiivne, vaid ka kaasahaarav. Kui ta ei kodeeri ega kirjuta, naudib ta sõpradega aega veetmist ja õues olemist.
Liituge meie uudiskirjaga
Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!
Tellimiseks klõpsake siin