|
|
3 months ago | |
|---|---|---|
| .. | ||
| README.md | 3 months ago | |
| assignment.md | 3 months ago | |
README.md
Робота з даними: Реляційні бази даних
![]() |
|---|
| Робота з даними: Реляційні бази даних - Sketchnote від @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
cities
| city_id | Місто | Країна |
|---|---|---|
| 1 | Токіо | Японія |
| 2 | Атланта | Сполучені Штати |
| 3 | Окленд | Нова Зеландія |
✅ Ви помітите, що під час цього уроку ми використовуємо терміни "id" і "первинний ключ" взаємозамінно. Ці концепції застосовуються до DataFrames, які ви вивчатимете пізніше. DataFrames не використовують термінологію "первинний ключ", але ви помітите, що вони поводяться дуже схоже.
Створивши таблицю міст, давайте збережемо дані про опади. Замість того, щоб дублювати повну інформацію про місто, ми можемо використати id. Також слід переконатися, що новостворена таблиця має стовпець id, оскільки всі таблиці повинні мати id або первинний ключ.
rainfall
| 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 у новоствореній таблиці rainfall. Цей стовпець містить значення, які посилаються на ID у таблиці cities. У технічних термінах реляційних даних це називається зовнішнім ключем; це первинний ключ з іншої таблиці. Ви можете просто вважати це посиланням або вказівником. city_id 1 посилається на Токіо.
[!NOTE] Зовнішній ключ часто скорочується як FK
Отримання даних
З нашими даними, розділеними на дві таблиці, ви можете запитати, як їх отримати. Якщо ми використовуємо реляційну базу даних, таку як MySQL, SQL Server або Oracle, ми можемо використовувати мову під назвою Structured Query Language або SQL. SQL (іноді вимовляється як sequel) — це стандартна мова для отримання та зміни даних у реляційній базі даних.
Для отримання даних використовується команда 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
Об’єднання даних
До цього моменту ми отримували дані з однієї таблиці. Тепер ми хочемо об’єднати дані з обох таблиць — cities і rainfall. Це робиться шляхом об’єднання їх разом. Ви фактично створите шов між двома таблицями і зіставите значення зі стовпця кожної таблиці.
У нашому прикладі ми зіставимо стовпець city_id у rainfall зі стовпцем city_id у cities. Це зіставить значення опадів із відповідним містом. Тип об’єднання, який ми виконаємо, називається inner join, що означає, що якщо якісь рядки не співпадають з чимось з іншої таблиці, вони не відображатимуться. У нашому випадку у кожного міста є дані про опади, тому все буде відображено.
Давайте отримаємо дані про опади за 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. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується звертатися до професійного людського перекладу. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.
