Skip to content

Latest commit

 

History

History
190 lines (128 loc) · 17.4 KB

File metadata and controls

190 lines (128 loc) · 17.4 KB

Работа с данни: Релационни бази данни

 Скетчно изображение от (@sketchthedocs)
Работа с данни: Релационни бази данни - Скетчно изображение от @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, можем да използваме език, наречен Структуриран език за заявки или 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 и концепциите за релационни бази данни

Задача

Показване на данни за летища


Отказ от отговорност:
Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.