|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
Работа с данными: реляционные базы данных
![]() |
---|
Работа с данными: реляционные базы данных - Скетчноут от @nitya |
Скорее всего, вы уже использовали электронные таблицы для хранения информации. У вас был набор строк и столбцов, где строки содержали информацию (или данные), а столбцы описывали эту информацию (иногда называемую метаданными). Реляционная база данных основана на этом базовом принципе столбцов и строк в таблицах, позволяя распределять информацию между несколькими таблицами. Это дает возможность работать с более сложными данными, избегать дублирования и иметь гибкость в исследовании данных. Давайте изучим концепции реляционной базы данных.
Тест перед лекцией
Все начинается с таблиц
В основе реляционной базы данных лежат таблицы. Как и в случае с электронными таблицами, таблица представляет собой набор столбцов и строк. Строка содержит данные или информацию, с которой мы хотим работать, например, название города или количество осадков. Столбцы описывают данные, которые они хранят.
Начнем наше исследование, создав таблицу для хранения информации о городах. Мы можем начать с их названия и страны. Это можно сохранить в таблице следующим образом:
Город | Страна |
---|---|
Токио | Япония |
Атланта | США |
Окленд | Новая Зеландия |
Обратите внимание, что названия столбцов город, страна и население описывают хранимые данные, а каждая строка содержит информацию об одном городе.
Недостатки подхода с одной таблицей
Скорее всего, приведенная выше таблица кажется вам довольно знакомой. Давайте добавим дополнительные данные в нашу растущую базу данных — годовое количество осадков (в миллиметрах). Мы сосредоточимся на годах 2018, 2019 и 2020. Если мы добавим данные для Токио, это может выглядеть следующим образом:
Город | Страна | Год | Количество |
---|---|---|---|
Токио | Япония | 2020 | 1690 |
Токио | Япония | 2019 | 1874 |
Токио | Япония | 2018 | 1445 |
Что вы замечаете в нашей таблице? Вы можете заметить, что мы повторяем название и страну города снова и снова. Это может занимать довольно много места и в основном является ненужным. В конце концов, у Токио есть только одно название, которое нас интересует.
Хорошо, давайте попробуем другой подход. Добавим новые столбцы для каждого года:
Город | Страна | 2018 | 2019 | 2020 |
---|---|---|---|---|
Токио | Япония | 1445 | 1874 | 1690 |
Атланта | США | 1779 | 1111 | 1683 |
Окленд | Новая Зеландия | 1386 | 942 | 1176 |
Хотя это позволяет избежать дублирования строк, возникают другие проблемы. Нам придется изменять структуру таблицы каждый раз, когда появляется новый год. Кроме того, по мере роста данных использование годов в качестве столбцов усложнит извлечение и вычисление значений.
Именно поэтому нам нужны несколько таблиц и отношения между ними. Разделяя данные, мы можем избежать дублирования и получить больше гибкости в работе с ними.
Концепция отношений
Вернемся к нашим данным и определим, как мы хотим их разделить. Мы знаем, что хотим хранить название и страну для наших городов, поэтому это, вероятно, лучше всего подойдет для одной таблицы.
Город | Страна |
---|---|
Токио | Япония |
Атланта | США |
Окленд | Новая Зеландия |
Но прежде чем создавать следующую таблицу, нам нужно понять, как ссылаться на каждый город. Нам нужен какой-то идентификатор, ID или (в технических терминах базы данных) первичный ключ. Первичный ключ — это значение, используемое для идентификации одной конкретной строки в таблице. Хотя это может быть основано на самом значении (например, мы могли бы использовать название города), оно почти всегда должно быть числом или другим идентификатором. Мы не хотим, чтобы идентификатор когда-либо изменялся, так как это нарушит связь. В большинстве случаев первичный ключ или идентификатор будет автоматически сгенерированным числом.
✅ Первичный ключ часто сокращается как PK
города
city_id | Город | Страна |
---|---|---|
1 | Токио | Япония |
2 | Атланта | США |
3 | Окленд | Новая Зеландия |
✅ Вы заметите, что мы используем термины "id" и "первичный ключ" взаимозаменяемо в течение этого урока. Эти концепции применимы к DataFrames, которые вы изучите позже. DataFrames не используют терминологию "первичный ключ", однако вы заметите, что они ведут себя аналогично.
Создав таблицу городов, давайте сохраним данные о количестве осадков. Вместо того чтобы дублировать полную информацию о городе, мы можем использовать идентификатор. Мы также должны убедиться, что вновь созданная таблица имеет столбец 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 в новой таблице осадки. Этот столбец содержит значения, которые ссылаются на идентификаторы в таблице города. В технических терминах реляционных данных это называется внешним ключом; это первичный ключ из другой таблицы. Вы можете просто думать о нем как о ссылке или указателе. 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. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.