17 KiB
Рад са подацима: Релационе базе података
![]() |
---|
Рад са подацима: Релационе базе података - Скетч од @nitya |
Вероватно сте раније користили табелу за чување информација. Имали сте сет редова и колона, где су редови садржали информације (или податке), а колоне описивале те информације (понекад назване метаподаци). Релациона база података је изграђена на овом основном принципу колона и редова у табелама, омогућавајући вам да имате информације распоређене у више табела. Ово вам омогућава да радите са сложенијим подацима, избегнете дуплирање и имате флексибилност у начину истраживања података. Хајде да истражимо концепте релационе базе података.
Квиз пре предавања
Све почиње са табелама
Релациона база података у својој основи има табеле. Као и код табеле, табела је збирка колона и редова. Ред садржи податке или информације са којима желимо да радимо, као што је име града или количина падавина. Колоне описују податке које чувају.
Хајде да започнемо истраживање тако што ћемо направити табелу за чување информација о градовима. Могли бисмо почети са њиховим именом и државом. Ово можете сачувати у табели као што је приказано:
Град | Држава |
---|---|
Токио | Јапан |
Атланта | Сједињене Државе |
Окленд | Нови Зеланд |
Приметите да називи колона град, држава и популација описују податке који се чувају, а сваки ред садржи информације о једном граду.
Недостаци приступа са једном табелом
Вероватно вам горња табела изгледа прилично познато. Хајде да додамо неке додатне податке нашој растућој бази података - годишње падавине (у милиметрима). Фокусираћемо се на године 2018, 2019 и 2020. Ако бисмо додали податке за Токио, то би изгледало овако:
Град | Држава | Година | Количина |
---|---|---|---|
Токио | Јапан | 2020 | 1690 |
Токио | Јапан | 2019 | 1874 |
Токио | Јапан | 2018 | 1445 |
Шта примећујете у нашој табели? Можда примећујете да дуплирамо име и државу града изнова и изнова. То би могло заузети прилично простора за складиштење, а углавном је непотребно имати више копија. На крају крајева, Токио има само једно име које нас занима.
У реду, хајде да пробамо нешто друго. Додаћемо нове колоне за сваку годину:
Град | Држава | 2018 | 2019 | 2020 |
---|---|---|---|---|
Токио | Јапан | 1445 | 1874 | 1690 |
Атланта | Сједињене Државе | 1779 | 1111 | 1683 |
Окленд | Нови Зеланд | 1386 | 942 | 1176 |
Иако ово избегава дуплирање редова, додаје неколико других изазова. Морали бисмо да мењамо структуру наше табеле сваки пут када се дода нова година. Поред тога, како наши подаци расту, имање година као колона отежаће преузимање и израчунавање вредности.
Због тога нам треба више табела и релације. Раздвајањем података можемо избећи дуплирање и имати више флексибилности у начину рада са подацима.
Концепти релација
Хајде да се вратимо нашим подацима и одредимо како желимо да их поделимо. Знамо да желимо да чувамо име и државу за наше градове, па ће ово вероватно најбоље функционисати у једној табели.
Град | Држава |
---|---|
Токио | Јапан |
Атланта | Сједињене Државе |
Окленд | Нови Зеланд |
Али пре него што направимо следећу табелу, морамо да смислимо како да референцирамо сваки град. Потребан нам је неки облик идентификатора, ID или (у техничким терминима базе података) примарни кључ. Примарни кључ је вредност која се користи за идентификацију једног специфичног реда у табели. Иако би ово могло бити засновано на самој вредности (могли бисмо, на пример, користити име града), скоро увек би требало да буде број или други идентификатор. Не желимо да се ID икада промени јер би то прекинуло релацију. У већини случајева примарни кључ или ID ће бити аутоматски генерисан број.
✅ Примарни кључ се често скраћује као PK
градови
city_id | Град | Држава |
---|---|---|
1 | Токио | Јапан |
2 | Атланта | Сједињене Државе |
3 | Окленд | Нови Зеланд |
✅ Приметићете да током овог предавања користимо термине "ID" и "примарни кључ" наизменично. Концепти овде се примењују на DataFrames, које ћете касније истражити. DataFrames не користе терминологију "примарни кључ", али ћете приметити да се понашају на исти начин.
Са нашом табелом градова креираном, хајде да чувамо податке о падавинама. Уместо да дуплирамо пуне информације о граду, можемо користити ID. Такође треба да осигурамо да новокреирана табела има ID колону, јер све табеле треба да имају ID или примарни кључ.
падавине
rainfall_id | city_id | Година | Количина |
---|---|---|---|
1 | 1 | 2018 | 1445 |
2 | 1 | 2019 | 1874 |
3 | 1 | 2020 | 1690 |
4 | 2 | 2018 | 1779 |
5 | 2 | 2019 | 1111 |
6 | 2 | 2020 | 1683 |
7 | 3 | 2018 | 1386 |
8 | 3 | 2019 | 942 |
9 | 3 | 2020 | 1176 |
Приметите колону city_id унутар новокреиране табеле падавине. Ова колона садржи вредности које референцирају ID-ове у табели градови. У техничким терминима релационих података, ово се назива страни кључ; то је примарни кључ из друге табеле. Можете га једноставно сматрати референцом или показивачем. city_id 1 референцира Токио.
[!NOTE] Страни кључ се често скраћује као FK
Преузимање података
Са нашим подацима подељеним у две табеле, можда се питате како их преузимамо. Ако користимо релациону базу података као што су MySQL, SQL Server или Oracle, можемо користити језик назван Structured Query Language или SQL. SQL (понекад изговарано "сиквел") је стандардни језик који се користи за преузимање и модификацију података у релационој бази података.
Да бисте преузели податке, користите команду SELECT
. У својој основи, изаберете колоне које желите да видите из табеле у којој се налазе. Ако желите да прикажете само имена градова, можете користити следеће:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
SELECT
је место где наводите колоне, а FROM
је место где наводите табеле.
[NOTE] SQL синтакса није осетљива на велика и мала слова, што значи да
select
иSELECT
значе исто. Међутим, у зависности од типа базе података коју користите, колоне и табеле могу бити осетљиве на велика и мала слова. Као резултат, најбоља пракса је увек третирати све у програмирању као да је осетљиво на велика и мала слова. Када пишете SQL упите, уобичајена конвенција је да ставите кључне речи у сва велика слова.
Горњи упит ће приказати све градове. Замислимо да желимо да прикажемо само градове у Новом Зеланду. Потребан нам је неки облик филтера. SQL кључна реч за ово је WHERE
, или "где је нешто тачно".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
Спајање података
До сада смо преузимали податке из једне табеле. Сада желимо да спојимо податке из табела градови и падавине. Ово се ради спајањем табела. Ефективно ћете направити везу између две табеле и упарити вредности из колоне из сваке табеле.
У нашем примеру, упарићемо колону city_id у табели падавине са колоном city_id у табели градови. Ово ће упарити вредност падавина са њеним одговарајућим градом. Тип спајања који ћемо извршити назива се унутрашње спајање, што значи да ако неки редови не одговарају ничему из друге табеле, неће бити приказани. У нашем случају, сваки град има податке о падавинама, тако да ће све бити приказано.
Хајде да преузмемо податке о падавинама за 2019. годину за све наше градове.
Урадићемо ово у корацима. Први корак је да спојимо податке тако што ћемо назначити колоне за везу - city_id, као што је истакнуто раније.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
Истакли смо две колоне које желимо, и чињеницу да желимо да спојимо табеле преко city_id. Сада можемо додати WHERE
изјаву да филтрирамо само годину 2019.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942
Резиме
Релационе базе података су усредсређене на поделу информација између више табела које се затим враћају за приказ и анализу. Ово пружа висок степен флексибилности за израчунавање и манипулацију подацима. Видели сте основне концепте релационе базе података и како да извршите спајање између две табеле.
🚀 Изазов
На интернету постоји много релационих база података. Можете истражити податке користећи вештине које сте научили.
Квиз после предавања
Квиз после предавања
Преглед и самостално учење
Постоји неколико ресурса доступних на Microsoft Learn за наставак истраживања SQL-а и концепата релационих база података
- Опис концепата релационих података
- Почетак рада са Transact-SQL (Transact-SQL је верзија SQL-а)
- SQL садржај на Microsoft Learn
Задатак
Одрицање од одговорности:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.