Skip to content

Latest commit

 

History

History
190 lines (128 loc) · 17.1 KB

File metadata and controls

190 lines (128 loc) · 17.1 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

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, мы можем использовать язык, называемый структурированным языком запросов или 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

Объединение данных

До сих пор мы извлекали данные из одной таблицы. Теперь мы хотим объединить данные из таблиц cities и rainfall. Это делается путём соединения их вместе. Вы фактически создадите шов между двумя таблицами и сопоставите значения из столбца каждой таблицы.

В нашем примере мы сопоставим столбец city_id в rainfall со столбцом city_id в cities. Это сопоставит значение осадков с соответствующим городом. Тип соединения, который мы выполним, называется внутренним соединением, что означает, что если какие-то строки не совпадают с чем-либо из другой таблицы, они не будут отображаться. В нашем случае у каждого города есть данные об осадках, поэтому всё будет отображено.

Давайте извлечём данные об осадках за 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 и концепций реляционных баз данных

Задание

Отображение данных аэропорта


Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется использовать профессиональный перевод, выполненный человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.