MongoDB on asiakirjatietokanta, eikä se ylläpidä asiakirjojen välisiä suhteita, kuten relaatiotietokantoja, kuten PostgreSQL.

Silti MongoDB antaa sinun luoda suhteita asiakirjojen välille. Nämä suhteet voidaan joko mallintaa sulautettujen tai viitattujen lähestymistapojen avulla. Katsotaanpa tarkemmin.

Sulautetut suhteet vs. Viitesuhteet

Upotetussa lähestymistavassa asiakirja lisätään suoraan toisen asiakirjan sisään, mikä johtaa sisäkkäisiin tietoihin. Prosessia kutsutaan myös "denormalisaatioksi".

Viitelähestymistapa sen sijaan käyttää asiakirjaviittauksia osoittamaan asiakirjasta toiseen. Tätä lähestymistapaa kutsutaan myös "normalisoinniksi".

MongoDB: Yksittäiset suhteet upotetuilla asiakirjoilla

Voit luoda kahdenkeskisen suhteen asiakirjojen välille käyttämällä upotettua lähestymistapaa. Tämä suhde syntyy, kun yksi asiakirjaobjekti voi liittyä vain yhteen toiseen asiakirjaan.

Harkitse opiskelijatietokantaa. Tämä tietokanta sisältää opiskelija- ja osoitekokoelmat ja seuraavat asiakirjat.

instagram viewer
// Opiskelijadokumentti
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
};
// Osoiteasiakirja
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"kaupunki": "Hobiton",
}

Tässä tietokannassa opiskelijalla saa olla vain yksi osoite. Osoitteen hakemiseksi sinun on tehtävä kysely osoitekokoelmasta opiskelijan nimellä.

Aiheeseen liittyvä: Tietokannan ja kokoelman luominen MongoDB: ssä

Tapauksissa, joissa osoitetta käytetään yhdessä muiden tietojen, kuten a opiskelijan nimi, sinun on tehtävä kysely tietokannasta useita kertoja. Tämän haittapuolena on lukuisten toimintojen suuri määrä ja siten alhainen kyselyn suorituskyky.

Sulautetun lähestymistavan avulla voit lisätä osoitetiedot suoraan opiskelijaasiakirjaan ja hakea tiedot vain yhdellä kyselyllä.

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

Osoitteen hakeminen opiskelijan nimi, käytä tätä kyselyä.

db.student.findOne({"opiskelijan nimi":"Frodo Baggins"}, {"osoite":1})

Yksi-moneen suhteet upotetuilla asiakirjoilla MongoDB: ssä

Harkitse tilannetta, jossa opiskelijalla on useita osoitteita. Opiskelijan ja osoitteiden välisestä suhteesta tulee yksi moneen.

Upotetun mallin avulla voit lisätä useita osoitteita opiskelijaasiakirjaan. Kuten upotettuja asiakirjoja käyttävässä yksi-yhteen-suhteessa, tällä lähestymistavalla on suhteellisen korkea kyselyn suorituskyky.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"osoite": [
{
"street": "Bagshot Row",
"kaupunki": "Hobiton"
},
{
"street": "Another Bagshot Row",
"kaupunki": "Hobiton2"
},
]
};

Alla oleva kysely palauttaa määritetyn opiskelijanimen osoitteet.

db.student.findOne({opiskelijan nimi: "Frodo Baggins"}, {osoite: 1})

Aiheeseen liittyvä: Asiakirjojen luominen MongoDB: ssä

Nyt, jos sinulla on enemmän osoitteita ja lisäät niitä jatkuvasti osoitekenttään, asiakirja voi sotkeutua melko nopeasti. Yksi ratkaisu on käyttää asiakirjaviittauksia.

MongoDB: Yksi-moneen suhteet asiakirjaviittauksilla

Voit myös mallintaa yksi-moneen -suhteen käyttämällä viitelähestymistapaa. Tässä tietomallissa opiskelija- ja osoitetiedot säilytetään erillisissä kokoelmissa. Jos haluat yhdistää opiskelijan osoitteeseen, lisää opiskelijaasiakirjaan kenttä, joka sisältää osoitetunnukset.

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

Opiskelijan osoitetietojen saaminen edellyttää osoitetunnusten hakemista opiskelijaasiakirjasta ja niiden käyttämistä todellisten osoitteiden hakemiseen kokoelmasta.

const student = db.users.findOne({"nimi":"Frodo Baggins"},{"osoite":1})
const osoitteet = db.osoite.find({"_id":{"$in":opiskelija["osoite_tunnukset"]}})

Valinta sulautettujen ja viitelähestymistapojen välillä

Sekä upotus- että viittausmalleilla on hyvät ja huonot puolensa, ja sinun on otettava huomioon muutama seikka ennen kuin teet valinnan. Ensinnäkin sinun on harkittava käyttötapausta. Jos tiedot liittyvät vain yhteen asiakirjaan, upottaminen voi olla paras vaihtoehto.

Voit luoda yksi-moneen-suhteita käyttämällä joko viittausmallia tai upotettua mallia. Viittauksen tuloksena saadaan puhdas ja johdonmukainen asiakirja, koska lisäät vain sen asiakirjan viitetunnuksen, johon haluat liittyä.

Yhdistettyjen tietojen hakemiseen tarvittavien lukutoimintojen määrä on kuitenkin suhteellisen suuri ja voi vaikuttaa suorituskykyyn. Asiakirjan upottaminen voi parantaa suorituskykyä, mutta monien sisäkkäisten asiakirjojen kanssa saatat päätyä ruuhkaiseen kokoelmaan.

Sen vuoksi voit valita, miten tietosuhteet toteutetaan asiakirjassasi. Harkitse asiakirjan käyttöä, tavoittelemaasi kyselyn suorituskykytasoa ja kompromisseja, joita olet valmis tekemään.

Kuinka tietomallinnus eroaa MongoDB: ssä?

Harkitsetko erilaista lähestymistapaa tietokantoihin? Näin tietojen mallinnus toimii MongoDB: ssä.

Lue Seuraava

JaaTweetSähköposti
Liittyvät aiheet
  • Ohjelmointi
  • Ohjelmointi
  • tietokanta
Kirjailijasta
Mary Gathoni (4 artikkelia julkaistu)

Mary Gathoni on ohjelmistokehittäjä, jonka intohimona on luoda teknistä sisältöä, joka ei ole vain informatiivinen, vaan myös mukaansatempaava. Kun hän ei koodaa tai kirjoita, hän nauttii ystävien kanssa olemisesta ja ulkoilusta.

Lisää Mary Gathonilta

tilaa uutiskirjeemme

Liity uutiskirjeemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja eksklusiivisia tarjouksia!

Klikkaa tästä tilataksesi