МонгоДБ је база података докумената и не одржава односе између докумената као што су релационе базе података као што је ПостгреСКЛ.

Ипак, МонгоДБ вам омогућава да креирате односе између докумената. Ови односи се могу или моделирати путем уграђених или референтних приступа. Хајде да погледамо изблиза.

Уграђени односи вс. Референтни односи

У уграђеном приступу, документ се директно убацује унутар другог документа, што резултира угнежђеним подацима. Процес се такође назива "денормализација".

Референтни приступ, с друге стране, користи референце на документе за усмеравање са једног документа на други. Овај приступ се такође назива "нормализација".

МонгоДБ: Односи један на један са уграђеним документима

Можете креирати однос један-на-један између докумената користећи уграђени приступ. Овај однос се јавља када се један објекат документа може односити само на један други документ.

Размотрите базу података студената. Ова база података садржи збирке ученика и адреса са следећим документима.

// Студентски документ
instagram viewer

{
"студентНаме": "Фродо Багинс",
"телефонски број": "987654321",
};
// Адреса документа
{
"студентНаме": "Фродо Багинс",
"улица": "Багсхот Ров",
"град": "Хобитон",
}

У овој бази података студенту је дозвољено да има само једну адресу. Да бисте преузели адресу, мораћете да упитате колекцију адреса користећи име ученика.

Повезан: Како направити базу података и колекцију у МонгоДБ-у

У случајевима када се адреса користи заједно са другим детаљима као што су а име студента, мораћете да питате базу података више пута. Недостатак овога је велики број операција читања и последично ниске перформансе упита.

Користећи уграђени приступ, можете уметнути податке о адреси директно у студентски документ и користити само један упит да бисте добили податке.

{
"студентНаме": "Фродо Багинс",
"телефонски број": "987654321",
"адреса": [{
"улица": "Багсхот Ров",
"град": "Хобитон"
}],
};

Да бисте добили адресу преко име студента, користите овај упит.

дб.студент.финдОне({"студентНаме":"Фродо Багинс"}, {"аддресс":1})

Односи један према више са уграђеним документима у МонгоДБ

Размотрите ситуацију у којој ученик има више адреса. Однос између ученика и адреса постаје један према више.

Уграђени модел вам омогућава да додате више адреса у студентски документ. Као иу односу један на један који користи уграђене документе, овај приступ има релативно високе перформансе упита.

{
"студентНаме": "Фродо Багинс",
"телефонски број": "987654321",
"адреса": [
{
"улица": "Багсхот Ров",
"град": "Хобитон"
},
{
"стреет": "Још један Багсхот Ров",
"град": "Хобитон2"
},
]
};

Упит у наставку ће вратити адресе наведеног имена ученика.

дб.студент.финдОне({студентНаме: “Фродо Баггинс”}, {адреса: 1})

Повезан: Како креирати документе у МонгоДБ-у

Сада, ако имате више адреса и наставите да их додајете у поље за адресу, документ се може прилично брзо затрпати. Једно решење је коришћење референци докумената.

МонгоДБ: Односи један на више са референцама докумената

Такође можете моделирати однос један-према-више користећи референтни приступ. У овом моделу података, подаци о ученицима и адресама ће се чувати у одвојеним збиркама. Да бисте повезали ученика са његовом адресом, додајте поље које садржи ИД адресе у студентски документ.

{
"студентНаме": "Фродо Багинс",
"телефонски број": "987654321",
"адреса": [
ОбјецтИд("61фа7бфеебдадф8ац71427еа"),
ОбјецтИд("61фа7д19ебдадф8ац71427еб")
]
};

Добијање детаља адресе ученика укључује преузимање ИД-ова адреса из студентског документа и коришћење тих ИД-ова за преузимање стварних адреса из колекције.

цонст студент = дб.усерс.финдОне({"наме":"Фродо Баггинс"},{"аддресс":1})
цонст адресе = дб.аддресс.финд({"_ид":{"$ин":студент["аддресс_идс"]}})

Избор између уграђеног и референтног приступа

И модели за уграђивање и референцирање имају своје предности и недостатке, и мораћете да размотрите неколико ствари пре него што направите избор. За почетак, мораћете да размотрите случај употребе. Ако ће се подаци односити само на један документ, уграђивање би могло бити ваша најбоља опција.

Да бисте креирали релације један према више, можете користити или референтни модел или уграђени модел. Референца резултира чистим и доследним документом јер додајете само референтни ИД документа са којим желите да се повежете.

Међутим, број операција читања потребних за преузимање повезаних података је релативно висок и може утицати на перформансе. Уграђивање документа може повећати перформансе, али са многим угнежђеним документима можете завршити са загушеном колекцијом.

Одабир начина имплементације односа података у вашем документу је стога у потпуности на вама. Размислите како ћете користити документ, ниво перформанси упита на који циљате и компромисе које сте спремни да направите.

Како се моделирање података разликује у МонгоДБ-у?

Размишљате о другачијем приступу базама података? Ево како моделирање података функционише у МонгоДБ-у.

Реад Нект

ОбјавиТвеетЕмаил
Повезане теме
  • Програмирање
  • Програмирање
  • база података
О аутору
Мари Гатхони (4 објављена чланка)

Мери Гатони је програмер софтвера са страшћу за стварање техничког садржаја који није само информативан већ и привлачан. Када не кодира или пише, ужива у дружењу са пријатељима и на отвореном.

Више од Мари Гатхони

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, рецензије, бесплатне е-књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили