Введние в БД#
База данных (БД) — это организованная коллекция структурированной информации, или данных, обычно хранящихся в электронном виде в компьютерной системе. База данных обычно управляется системой управления базами данных (СУБД). Вместе данные и СУБД, а также приложения, связанные с ними, называются системой баз данных, часто сокращенно просто базой данных.
Данные в наиболее распространенных типах баз данных, используемых сегодня, обычно моделируются в виде строк и столбцов в ряде таблиц, чтобы сделать обработку и запрос данных эффективными. Затем к данным можно легко получить доступ, управлять ими, изменять, обновлять, контролировать и организовывать. Большинство баз данных используют структурированный язык запросов (SQL) для записи и запроса данных.
Данные и информация#
Прежде чем мы углубимся в мир данных, давайте разберемся в разнице между данными и информацией.
ДАННЫЕ – ЭТО:
Представление информации в формализованном виде, пригодном для передачи, интерпретации или обработки людьми или компьютерами
ГОСТ 33707-2016 (ISO/IEC 2382:2015) «Информационные технологии. Словарь»
Любой вид знаний о предметах, фактах, понятиях и т. д. проблемной области, которыми обмениваются пользователи информационной системы
ГОСТ Р ИСО/МЭК 10746-2-2000 «Информационная технология. Взаимосвязь открытых систем. Управление данными и открытая распределенная обработка»
Для того чтобы информация стала данными, необходимо провести процесс формализации и кодирования. Давайте рассмотрим этот процесс более подробно:
- Сбор информации: Вначале нужно собрать информацию, которую вы хотите преобразовать в данные.
- Формализация: Формализация представляет собой процесс структурирования и организации информации в определенной форме. Например, если вы имеете текстовый документ, вы можете определить структуру, разбив его на заголовки, абзацы, списки и так далее. Формализация также может включать в себя определение формата данных, такого как дата или числа.
- Кодирование: После формализации информации, она должна быть закодирована в определенный формат, который компьютеры могут понимать. Это может включать в себя преобразование текста в байты с использованием определенной кодировки (например, UTF-8 для текста), или преобразование изображения в формат JPEG.
- Хранение данных: Закодированные данные сохраняются в определенном хранилище, таком как жесткий диск, база данных или облако.
Типы данных#
Когда определение данных введено следует задаться вопросом: Как мы можем их хранить?
В информатике, как вам известно, выделляют два типа данных: скалярные (простые) и составные(структирированные)
Структурированный тип данных – тип, характеристиками которого являются: множественность элементов, его структура, способ доступа к элементам, тип элементов и операции с данными этого типа. Множество значений такого типа определяется множеством значений его элементов и их количеством. Переменная или константа структурированного типа всегда имеет несколько компонент. Каждая из этих компонент, в свою очередь, может принадлежать структурированному типу, что позволяет говорить о возможной вложенности типов.
Множество#
Понятие множества является исходным не определяемым строго понятием.
Приведем здесь определение множества, принадлежащее Г.Кантору:
Quote
«Под многообразием, или множеством я понимаю вообще все многое, которое возможно мыслить как единое, т.е такую совокупность определенных элементов, которая посредством одного закона может быть соединена в одно целое»
Множества хранят данные без определенного порядка и без повторяющихся значений. Помимо возможности добавления и удаления элементов, есть несколько других важных функций, которые работают с двумя наборами одновременно. Особенность множества заключается в высокой скорости проверки принадлежности к нему элемента.
Основные операции:
- Объединение комбинирует все элементы из двух разных множеств, превращая их в одно (без дубликатов).
- Пересечение анализирует два множества и создает еще одно из тех элементов, которые присутствуют в обоих изначальных множествах.
- Разность выводит список элементов, которые есть в одном множестве, но отсутствуют в другом.
- Подмножество выдает булево значение, которое показывает, включает ли одно множество все элементы другого множества.
Множество (set) представляет такой контейнер, который может хранить только уникальные значения. Как правило, множества применяются для создания коллекций, которые не должны иметь дубликатов.
Множество может вообще не содержать ни одного элемента. В этом случае его именуют пустым множеством и обозначают как ∅.
Множество, которое содержит конечное количество элементов, именуют конечным множеством. Если множество содержит бесконечное количество элементов, его называют бесконечным.
Например, множество A={0,5,6,−9} – конечное множество, ибо содержит 4 элемента (т.е. конечное число элементов).
Множество натуральных чисел N является бесконечным.
Способы задания множества#
Считают, что множество определяется своими элементами, т.е. множество задано, если о любом объекте можно сказать, принадлежит он этому множеству или не принадлежит.
-
Множество можно задать, перечислив все его элементы.
Например, если мы скажем, что множество А состоит из чисел 3, 4, 5, и 6, то мы задали это множество, поскольку все его элементы окажутся перечисленными.
При этом возможна запись, в которой перечисляемые элементы заключаются в фигурные скобки: А = {3, 4, 5, 6}. -
Множество можно задать указав условие принадлежности ко множество (Предикатный способ)
A={a|P(a)}, где P(a) – условие (предикат), которому удовлетворяет а.
Пример: множество положительных действительных чисел – A={a|a>0}. -
Множество можно задать указав некоторую функцию (Порождающая процедура)
Порождающая процедура: A={a|a=F}.
Пример: множество из n нечетных положительных чисел - A={a|a=2k+1, k=0,1,2,3,…n}.
Кортеж#
Кортеж — упорядоченный набор фиксированной длины.
Кортежем длины n из элементов множества А называется упорядоченная <a1, a2, a3 ... an> последовательность элементов этого множества.
Мощность множества#
Под мощностью множества для конечных множеств понимают количество элементов данного множества. Мощность множества A обозначается как |A|.
Примеры:
1. Мощность объединения двух непересекающихся множества (A ⋂ B= ∅): |A ⋃ B| = |A| + |B|
2. Мощность объединения в общем случае: |A ⋃ B| = |A| + |B| * |A ⋂ B|
Декартово произведение#
Прямое, или декартово произведение двух непустых множеств — множество, элементами которого являются все возможные упорядоченные пары элементов исходных множеств
Пусть даны два множества, A и 𝐵. Образуем множество упорядоченных пар элементов, у которых первый элемент принадлежит 𝐴, а второй - 𝐵.
Полученное множество называется декартовым произведением множеств 𝐴 и 𝐵 и обозначается 𝐴 × 𝐵.
От множества к реляционной БД#
Подробнее от типах БД вы можете узнать из лекционной части. Здесь мы остановимся на основных концепциях реляционных БД.
В реляционных базах данных кортеж — это элемент отношения. Для N-арного отношения кортеж представляет собой упорядоченный набор из N значений, по одному значению для каждого атрибута отношения, то есть запись (строку) таблицы, если использовать наиболее популярное представление (графическую/физическую интерпретацию) отношения как таблицы.
Термин | Описание |
---|---|
Реляционная модель данных | Табличное представление |
Отношение | Реляционная таблица |
Атрибут | Имя столбца |
Кортеж | Строка реляционной таблицы |
Домен | Множество допустимых значений для столбца |
Степень отношения | Число столбцов реляционной таблицы |
Мощность отношения | Число строк реляционной таблицы |
Реляционная база данных | Совокупность взаимосвязанных таблиц |
Реляционная модель данных - это модель представления и организации данных в базе данных. В реляционной модели данные хранятся в виде таблиц, состоящих из строк и столбцов. Каждая таблица имеет имя и структуру, определяемую набором столбцов и их типами данных.
Таблица - это основной объект в реляционной модели данных, который хранит данные в виде строк и столбцов. Каждая таблица имеет уникальное имя и структуру, определяемую набором столбцов и их типами данных. В таблице каждая строка представляет собой запись, а каждый столбец представляет собой конкретное свойство или атрибут объекта.
Столбец - это одно поле в таблице, которое хранит данные одного типа. Каждый столбец имеет уникальное имя и тип данных, который определяет, какой тип данных может храниться в столбце.
Строка - это одна запись в таблице, которая содержит данные для каждого столбца. Каждая строка в таблице имеет уникальный идентификатор, который называется ключом. Ключ может быть составным, т.е. может включать несколько столбцов.
В чем разница между базой данных и электронной таблицей?#
Базы данных и электронные таблицы (например, Microsoft Excel) — это удобные способы хранения информации. Основными различиями между ними являются:
- Как хранятся данные и как ими управляют
- Кто может получить доступ к данным
- Какой объем данных может быть сохранен
Электронные таблицы изначально разрабатывались для одного пользователя, и их характеристики отражают это. Они отлично подходят для одного пользователя или небольшого числа пользователей, которым не нужно выполнять множество невероятно сложных манипуляций с данными. Базы данных, с другой стороны, предназначены для хранения гораздо больших коллекций организованной информации — иногда огромных объемов. Базы данных позволяют нескольким пользователям одновременно быстро и безопасно получать доступ к данным и запрашивать их, используя очень сложную логику и язык.
SQL (Structured Query Language)#
SQL — это язык программирования, используемый почти всеми реляционными базами данных для запросов, манипулирования и определения данных, а также для обеспечения контроля доступа. SQL был впервые разработан в IBM в 1970-х годах при участии Oracle, что привело к внедрению стандарта SQL ANSI, SQL послужил толчком к появлению множества расширений от таких компаний, как IBM, Oracle и Microsoft. Хотя SQL широко используется и сегодня, начинают появляться новые языки программирования.
В 2023 году SQL (Structured Query Language) остается одним из самых популярных языков программирования, используемых в области баз данных и аналитики данных. Изучение SQL может быть полезным как для тех, кто только начинает свой путь в IT, так и для опытных профессионалов, которые хотят расширить свои знания и навыки.
Согласно данным сайта Indeed.com, в 2023 году требования к кандидатам в вакансиях, связанных с базами данных и анализом данных, включают знание SQL в качестве обязательного навыка. Некоторые из таких популярных вакансий включают в себя SQL Developer, Data Analyst, Database Administrator, Business Intelligence Analyst и другие. В связи с этим, изучение SQL может быть полезным для тех, кто хочет улучшить свои шансы на рынке труда и получать высокую заработную плату в IT-сфере.
Стуруктура SQL#
Реляционная алгебра представляет собой математический аппарат для операций с отношениями в базе данных, включая выборку, проекцию, соединение, пересечение и другие операции над множествами данных (см. операции над множествами).
SQL (Structured Query Language) - это язык программирования, основанный на реляционной модели данных. SQL расширяет идеи реляционной алгебры, предоставляя более широкий спектр возможностей для работы с данными.
Язык SQL отличается от реляционной алгебры, в которой есть лишь операции запросов к базам данных, тем обстоятельством, что он считается полным языком. У него имеются помимо операций запросов ещё и операторы, которые соответствуют DDL (Data Definition Language), то есть, языку описания данных. Помимо этого, язык SQL имеет операторы, которые предназначены для административного управления базами данных.
DDL (Data Definition Language)#
Операторы DDL используются для создания, изменения и удаления структуры базы данных и её объектов, таких как таблицы, индексы, представления и т.д.
Примеры операторов DDL: CREATE, ALTER, DROP, TRUNCATE, RENAME.
CREATE TABLE имя_таблицы (
столбец1 ТИП_ДАННЫХ,
столбец2 ТИП_ДАННЫХ
);
DML (Data Manipulation Language)#
Операторы DML позволяют работать с данными внутри таблицы, включая выборку, вставку, обновление и удаление записей.
Примеры операторов DML: INSERT, UPDATE, DELETE.
Пример запроса на выборку данных с помощью оператора SELECT:
INSERT INTO имя_таблицы (столбец1, столбец2, ...)
VALUES (значение1, значение2, ...);
Cтруктура SQL-запроса#
Перед вами — пример классического SQL-запроса, который состоит из шести самых популярных операторов: два из них обязательные, а другие четыре — используются по обстоятельствам. Вместе они выглядят так:
- SELECT — выбирает отдельные столбцы или всю таблицу целиком (обязательный);
- FROM — из какой таблицы получить данные (обязательный);
- WHERE — условие, по которому SQL выбирает данные;
- GROUP BY — столбец, по которому мы будут группироваться данные;
- HAVING — условие, по которому сгруппированные данные будут отфильтрованы;
- ORDER BY — столбец, по которому данные будут отсортированы;
Пример типичной структуры и иллюстрация
```sql
SELECT имя_столбца1, имя_столбца2
FROM имя_таблицы
WHERE условие
GROUP BY имя_столбца
HAVING условие
ORDER BY имя_столбца ASC
```
SELECT#
Любая команда должна начинаться с ключевого слова — или действия, которое должно произойти. Например, выбрать строку, вставить новую, изменить старую или удалить таблицу целиком.
Одно из таких ключевых слов — SELECT. Оно выбирает отдельные столбцы или таблицу целиком, чтобы потом передать данные другим запросам на обработку.
FROM#
Эта часть ставится после SELECT и нужна затем, чтобы указать, из какой таблицы или источника данных приходит информация. Здесь прописывается имя таблицы, с которой мы хотим работать.
WHERE#
Если нужно отфильтровать данные, используем слово WHERE. После него указывается условие, которому должны удовлетворять строки, чтобы они попали в результат выполнения запроса.
Условия после оператора WHERE в SQL используются для фильтрации строк в результирующем наборе данных. Они могут включать различные операторы и выражения для проверки значений столбцов и их соответствия заданным условиям.
Вот несколько примеров того, что может входить в условия после WHERE:
-
Сравнения:
=, != (не равно), >, <, >=, <= (больше/меньше или равно)
Например: age > 18, name = 'John'
2.Логические операторы:
AND, OR, NOT для комбинирования нескольких условий.
Например: age > 18 AND city = 'New York'
-
IN и NOT IN:
Проверка на вхождение или отсутствие значения в списке значений.
Например: category IN ('A', 'B', 'C')
LIKE: -
Поиск по шаблону (используется с символами подстановки ? для обозначения 1 символа (в том числе пустого) и * для большего количества символов).
Warning
Спецсимволы могут отличаться в разных диалектах SQL. Например вместо ? могут использовать %
-
NULL и NOT NULL:
Проверка на наличие или отсутствие значений NULL в столбце.
Например: column IS NULL
-
Выражения с функциями:
Использование арифметических операций или функций для создания условий.
Например: price * quantity > 100
Практическое задание#
Этапы работы#
Создание базы данных (БД) и написание SQL запросов обычно включает несколько этапов:
-
Планирование:
- Определение целей и требований к базе данных.
- Разработка структуры данных и связей между ними.
- Выбор используемых таблиц, полей, типов данных и индексов.
-
Создание схемы БД:
- Используйте SQL или специальные инструменты для создания структуры БД (таблицы, связи между таблицами, ограничения, индексы).
-
Наполнение данными:
- Добавление начальных данных в таблицы, которые могут быть необходимы для работы.
-
Написание SQL запросов:
- Создание запросов для выполнения различных операций с данными: выборка (SELECT), вставка (INSERT), обновление (UPDATE), удаление (DELETE).
- Формирование запросов для создания, изменения или удаления таблиц и индексов (DDL - Data Definition Language).
- Написание запросов для управления данными (DML - Data Manipulation Language).
-
Тестирование:
- Проверка корректности запросов и соответствия их ожидаемым результатам.
- Тестирование производительности запросов для оптимизации работы с базой данных.
-
Оптимизация:
- Анализ и улучшение производительности запросов и структуры базы данных.
- Добавление индексов, оптимизация запросов для повышения скорости выполнения.
-
Администрирование:
- Регулярное обслуживание базы данных, резервное копирование, обновление и обеспечение безопасности данных.
Учебная БД "Аэропорт"#
Цели базы данных:
- Хранение информации о рейсах, аэропортах назначения, самолетах и пассажирах.
- Связь между данными для эффективного управления информацией о рейсах, вылетах, пассажирах и используемых самолетах.
- Обеспечение целостности данных и возможность обновления, удаления и добавления информации.
База данных будет состоять из 5-ти таблиц со следующей стуктурой:
- Таблица "Аэропорты назначения"
- Код аэропорта (Счетчик, первичный ключ)
- Название (Текстовый, 30)
-
Таблица "Рейсы"
- Код рейса (Счетчик, первичный ключ)
- Номер рейса (Числовой, длинное целое)
- Аэропорт вылета (Текстовый, 20)
- Аэропорт назначения (Внешний ключ, ссылается на таблицу "Аэропорты назначения")
- Продолжительность полета (Временной)
- Цена билета (Денежный, в рублях)
-
Таблица "Самолеты" (Самостоятельно определите типы), замените знак вопроса.
- Код самолета (Счетчик, первичный ключ)
- Тип самолета (?)
- Количество мест (?)
- Дальность полета (?)
-
Таблица "Вылеты"
- Код вылета (Счетчик, первичный ключ)
- Рейс (Внешний ключ, ссылается на таблицу "Рейсы")
- Время вылета (Дата/время, полный формат даты)
- Самолет (Внешний ключ, ссылается на таблицу "Самолеты")
- Командир экипажа (Текстовый, 20)
-Таблица "Пассажиры"
- Код пассажира (Счетчик, первичный ключ)
- Вылет (Внешний ключ, ссылается на таблицу "Вылеты")
- Номер места (Числовой, целое)
- ФИО (Текстовый, 20)
- Паспорт (Текстовый, 10, по маске ввода)
Ниже рассмотрено создание данной БД в СУБД «MS Access 2016».
- Откройте Microsoft Access 2016.
- Создайте новую базу данных или откройте уже существующую.
- Вкладка "Создание" -> "Конструктор запросов" -> "Запросы"
- Щелкните правой кнопкой мыши по Запросу и перейдите в режим SQL
Далее последовательно создайте по ТЗ таблицы.
Таблица "Аэропорты назначения"
CREATE TABLE DestinationAirports (
AirportCode COUNTER PRIMARY KEY,
AirportName TEXT(30)
);
Таблица "Рейсы"
CREATE TABLE Flights (
FlightCode COUNTER PRIMARY KEY,
FlightNumber LONG,
DepartureAirport TEXT(20),
DestinationAirport INTEGER,
FlightDuration BYTE,
TicketPrice CURRENCY,
FOREIGN KEY (DestinationAirport) REFERENCES DestinationAirports(AirportCode)
);
Таблица "Самолеты" (заполните самостоятельно типы. Например : PlaneCode COUNTER PRIMARY KEY )
CREATE TABLE Planes (
PlaneCode ДОПИШИТЕ_ТИП,
PlaneType ДОПИШИТЕ_ТИП,
SeatCount ДОПИШИТЕ_ТИП,
FlightRange ДОПИШИТЕ_ТИП
);
Таблица "Вылеты"
CREATE TABLE Departures (
DepartureCode COUNTER PRIMARY KEY,
Flight INTEGER,
DepartureTime DATETIME,
Plane INTEGER,
CrewCommander TEXT(20),
FOREIGN KEY (Flight) REFERENCES Flights(FlightCode),
FOREIGN KEY (Plane) REFERENCES Planes(PlaneCode)
);
Таблица "Пассажиры" (заполните сами типы и ключи)
CREATE TABLE Passengers (
PassengerCode ДОПИШИТЕ_ТИП,
Departure ДОПИШИТЕ_ТИП,
SeatNumber ДОПИШИТЕ_ТИП,
PassengerName ДОПИШИТЕ_ТИП,
Passport ДОПИШИТЕ_ТИП
FOREIGN KEY (НАПИШИТЕ СЮДА ИМЯ КОЛОНКИ) REFERENCES Departures(НАПИШИТЕ СЮДА ИМЯ КОЛОНКИ)
);
Итоговая схема БД:
Хорошие книги для изучения SQL#
Вот несколько хороших книг на русском языке для изучения SQL:
-
"SQL для чайников" от Алана Бьюли - это популярная книга для начинающих, которая предлагает читателям основы SQL и практические примеры.
-
"SQL - язык запросов к базам данных" от А. А. Степанова - это книга, содержащая основы SQL и примеры запросов на языке SQL.
-
"SQL. Полное руководство" от Александра Кузнецова - это книга, которая предлагает обширное руководство по SQL, включая основы языка, запросы, проектирование баз данных и оптимизацию производительности.
-
" SQL. Сборник рецептов. 2-е изд." Автор: Роберт де Грааф, Энтони Молинаро - Рассмотрены готовые рецепты для решения практических задач при работе с СУБД Oracle, DB2, SQL Server, MySQL и PostgreSQL.