-
Notifications
You must be signed in to change notification settings - Fork 7
exam 11 2 2022 (second part)
Реферат к лекции 11 (27). Базы Данных
Проверила: Никитина А.С. ИДБ-19-05
Выполнил: Алаев К.В. ИДБ-19-05
Базы данных - это системы, которые хранят и обрабатывают большие объемы информации. Они используются во многих различных областях, включая бизнес, науку и технологии.
Базы данных обычно создаются с целью упрощения хранения и обработки больших объемов информации. Они могут быть использованы для хранения информации о продуктах, клиентах, сотрудниках и многом другом.
Существует разные типы баз данных, включая реляционные, объектно-ориентированные и документо-ориентированные. Каждый тип базы данных имеет свои собственные функции и особенности, которые подходят для решения различных задач.
Для работы с базами данных необходимо использовать специальное программное обеспечение, называемое СУБД (Система Управления Базами Данных). С помощью СУБД можно создавать, изменять и управлять базами данных, а также выполнять различные операции с данными, например, запросы и анализ.
В базах данных данные хранятся в структурированном виде, что позволяет легко их извлекать и обрабатывать. Это упрощает работу с информацией и позволяет сохранять ее в удобном и доступном виде.
В заключение, базы данных - это важные инструменты для хранения и обработки информации. Они помогают обеспечить эффективное управление информацией и облегчают доступ к ней.
В базе данных есть несколько основных понятий, которые необходимо знать для ее понимания и работы с ней.
Структура базы данных - это набор таблиц, связей между ними и других объектов, которые определяют, как информация будет храниться в базе данных.
Таблица - это основная структура данных в базе данных, которая содержит строки и столбцы. Каждая строка таблицы содержит информацию об одном объекте, а каждый столбец содержит информацию об одном свойстве этого объекта.
Первичный ключ - это уникальное поле или набор полей, которое используется для идентификации каждой строки таблицы. Первичный ключ используется для создания связей между таблицами и обеспечения уникальности всех записей в таблице.
Внешний ключ - это поле в одной таблице, которое ссылается на первичный ключ другой таблицы. Это позволяет создавать связи между таблицами, что важно для организации информации и избежания дубликации данных.
Запрос - это операция, которая используется для извлечения информации из базы данных. Запросы могут быть очень разнообразными, от простого извлечения определенной информации до сложных операций анализа и обработки данных.
Схема базы данных - это логическое представление структуры данных в базе данных. Она описывает, какие таблицы есть в базе данных, какие поля в каждой таблице и какие связи существуют между таблицами.
Схема базы данных важна для понимания того, какие данные хранятся в базе и каким образом они связаны между собой. Она помогает спроектировать базу данных таким образом, чтобы она была максимально эффективной и гибкой для использования.
Схема базы данных обычно представлена в виде диаграммы, где таблицы представлены в виде прямоугольников, а связи между таблицами - в виде стрелок. Это позволяет визуально представить структуру базы данных и лучше понять, как она функционирует.
Схема базы данных является логической структурой базы данных. Это означает, что она описывает то, какие данные хранятся в базе и как они связаны между собой, но не описывает точный способ хранения этих данных на физическом уровне.
Например, схема базы данных может описывать таблицу с информацией о пользователях и таблицу с информацией о заказах, а также связь между ними, которая определяет, какой пользователь совершил какой заказ. Эта схема не описывает точное расположение таблиц на жестком диске или то, каким образом информация в них хранится. Она лишь описывает логическую структуру базы данных.
Схема базы данных также может быть понимается как объект базы данных. Это означает, что схема является частью базы данных и может быть манипулирована как любой другой объект в базе.
Например, схему можно создать, удалить, изменить или просмотреть как любой другой объект в базе данных. Также схему можно использовать в запросах и операциях анализа данных. Это позволяет эффективно управлять структурой базы данных и обеспечить ее гибкость и эффективность.
Уровень изоляции базы данных - это степень, в которой операции с данными в базе данных изолированы друг от друга. Есть различные уровни изоляции, которые различаются степенью изоляции и имеют разные последствия для производительности и надежности базы данных.
Ниже приведены основные уровни изоляции базы данных с примерами:
- Чтение незафиксированных данных (Read Uncommitted): Это самый низкий уровень изоляции, при котором операции с данными могут быть выполнены даже в том случае, если другие операции еще не завершены. Это может привести к неконсистентности данных и ошибкам в работе базы данных.
- Чтение фиксированных данных (Read Committed) - это уровень изоляции, который гарантирует, что операции чтения данных будут выполнены только после завершения операций записи, которые модифицируют эти данные. Таким образом, чтение данных гарантируется консистентным и не будет возвращать некорректные или неполные данные. Этот уровень изоляции позволяет избежать проблем с неконсистентностью данных, которые могут возникнуть на низких уровнях изоляции, но он также может привести к более низкой производительности, так как операции чтения будут ожидать завершения операций записи.
- Повторяющееся чтение (Repeatable Read) - это уровень изоляции, который гарантирует, что операции чтения данных будут выполнены только после завершения всех операций записи, которые могут модифицировать эти данные. Таким образом, чтение данных гарантируется консистентным и не будет возвращать некорректные или неполные данные. Кроме того, на этом уровне изоляции гарантируется, что данные, которые были прочитаны в одной транзакции, не будут изменены другой транзакцией до завершения первой транзакции. Это защищает от ошибок, когда данные могут быть изменены другой транзакцией во время выполнения
- Упорядочиваемость (Serializable) - это самый высокий уровень изоляции, который гарантирует, что все транзакции будут выполнены так, как если бы они выполнялись последовательно, одна за другой. Это означает, что операции чтения и записи данных будут выполнены только после того, как все предыдущие операции будут завершены, и новые операции не будут начинаться до тех пор, пока не завершатся все текущие операции.
Стоит отметить, что выбор уровня изоляции базы данных зависит от требований к системе и ее характера работы. Например, в системах с высокой нагрузкой и частыми операциями чтения и записи данных может быть применен более низкий уровень изоляции, чтобы увеличить производительность системы. На другом конце спектра, в системах с критически важными данными и низкой нагрузкой может быть применен более высокий уровень изоляции, чтобы обеспечить надежность и консистентность данных.
Некоторые из популярных баз данных и их уровни изоляции:
- MySQL: по умолчанию использует изоляцию чтений (Read Committed), но может быть настроена для использования изоляции повторяемых чтений (Repeatable Read) или сериализуемой изоляции (Serializable).
- PostgreSQL: по умолчанию использует изоляцию повторяемых чтений (Repeatable Read), но может быть настроена для использования сериализуемой изоляции (Serializable).
- Microsoft SQL Server: по умолчанию использует изоляцию чтений (Read Committed), но может быть настроена для использования изоляции повторяемых чтений (Repeatable Read) или сериализуемой изоляции (Serializable).
- Oracle: по умолчанию использует изоляцию повторяемых чтений (Repeatable Read), но может быть настроена для использования сериализуемой изоляции (Serializable).
Существует несколько видов баз данных, которые отличаются по структуре и способу хранения данных. Ниже перечислены некоторые из этих видов:
- Реляционные базы данных: в этом типе баз данных данные хранятся в виде таблиц, которые связаны между собой по определенным правилам. Этот тип баз данных позволяет эффективно обрабатывать большие объемы данных и использовать их для анализа. Примеры реляционных баз данных: MySQL, PostgreSQL, Microsoft SQL Server, Oracle.
- Объектно-ориентированные базы данных: в этом типе баз данных данные хранятся в виде объектов, которые могут иметь свойства и методы. Этот тип баз данных больше подходит для работы с данными, которые имеют сложную структуру и взаимосвязи. Он также позволяет эффективно масштабировать приложения и избежать дублирования данных. Примеры объектно-ориентированных баз данных: MongoDB, CouchDB, OrientDB.
- Графовые базы данных: в этом типе баз данных данные хранятся в виде взаимосвязанных объектов (узлов) и связей между ними. Этот тип баз данных подходит для хранения и анализа данных, которые имеют сложную структуру связей между объектами. Примеры графовых баз данных: Neo4j, ArangoDB, JanusGraph.
- Нереляционные базы данных: этот тип баз данных включает в себя все остальные базы данных, которые не являются реляционными. Это могут быть как объектно-ориентированные, так и графовые базы данных, а также другие типы баз данных, которые используют нереляционные модели данных.
Индексы в Postgres - это специальные структуры данных, которые используются для ускорения поиска и доступа к данным в базе данных. Индексы подобны указателям в книге - они содержат ссылки на определенные записи и позволяют быстро найти их.
В Postgres есть несколько типов индексов, в том числе поисковый индекс (B-Tree), индекс хеширования и индекс ближайшего соседа (k-d tree index). Какой из них использовать зависит от определенных условий, таких как тип данных, которые хранятся в базе данных, и способ их использования.
Создание индекса в Postgres производится с помощью команды CREATE INDEX
. Например, чтобы создать индекс для таблицы customers
, можно использовать следующий запрос:
CREATE INDEX idx_customers_name ON customers(name)
Этот запрос создаст индекс с именем idx_customers_nam
e для колонки name
таблицы customers
. После создания индекса он будет использоваться Postgres для ускорения поиска и доступа к данным в этой колонке.
Индексы также могут использоваться для ускорения сортировки и группировки данных, а также для оптимизации операций объединения и пересечения таблиц. Однако индексы также могут увеличить размер базы данных и замедлить выполнение операций вставки, обновления и удаления данных, так как в этом случае необходимо обновлять индексы. Поэтому при работе с индексами необходимо подходить к их созданию и использованию с умом, выбирая те индексы, которые реально понадобятся для ускорения работы вашей базы данных.
Кроме того, в Postgres также имеется возможность создавать индексы с использованием поставщиков типов данных (data type providers). Это позволяет создавать индексы для специализированных типов данных, которые не поддерживаются стандартными индексами Postgres. Например, можно создать индекс для типа данных geometry
, который используется для хранения геометрических данных, таких как координаты точек на карте.
В общем, индексы в Postgres - это один из мощных инструментов для ускорения работы базы данных и оптимизации поиска и доступа к данным. Их умелое использование может значительно улучшить производительность вашей базы данных и сделать ее работу более эффективной.
Ниже приведен пример кода SQL, который может быть использован для создания таблицы "Студенты" и добавления в нее данных:
-- создаем таблицу Студенты
CREATE TABLE Students (
-- идентификатор студента
Id INT PRIMARY KEY,
-- ФИО студента
Name VARCHAR,
-- год рождения
BirthYear DATE,
-- номер телефона
Phone VARCHAR,
-- адрес
Address VARCHAR
);
-- добавляем данные в таблицу Студенты
INSERT INTO Students (Id, Name, BirthYear, Phone, Address)
VALUES (1, 'Иванов Иван Иванович', '2001-01-01', '+71234567890', 'г. Москва, ул. Ленина, д. 1'),
(2, 'Петров Петр Петрович', '2002-02-02', '+71234567891', 'г. Москва, ул. Ленина, д. 2'),
(3, 'Сидоров Сидор Сидорович', '2003-03-03', '+71234567892', 'г. Москва, ул. Ленина, д. 3');
-- создаем индекс по ФИО студента
CREATE INDEX idx_students_name ON Students (Name);
-- создаем индекс по году рождения студента
CREATE INDEX idx_students_birthyear ON Students (BirthYear);
Код для создания таблицы "Группы" и добавления в нее данных может выглядеть так:
-- создаем таблицу Группы
CREATE TABLE Groups (
-- идентификатор группы
Id INT PRIMARY KEY,
-- название группы
Name VARCHAR,
-- курс
Course INT
);
-- добавляем данные в таблицу Группы
INSERT INTO Groups (Id, Name, Course)
VALUES (1, 'ПИ-11', 1),
(2, 'ПИ-12', 2),
(3, 'ПИ-13', 3);
-- создаем индекс по названию группы
CREATE INDEX idx_groups_name ON Groups (Name);
-- создаем индекс по курсу группы
CREATE INDEX idx_groups_course ON Groups (Course);
Код для создания таблицы "Студенты_Группы" и добавления в нее данных может выглядеть так:
-- создаем таблицу Студенты_Группы
CREATE TABLE Students_Groups (
-- идентификатор студента
StudentId INT,
-- идентификатор группы
GroupId INT,
PRIMARY KEY (StudentId, GroupId),
FOREIGN KEY (StudentId) REFERENCES Students (Id),
FOREIGN KEY (GroupId) REFERENCES Groups (Id)
);
-- добавляем данные в таблицу Студенты_Группы
INSERT INTO Students_Groups (StudentId, GroupId)
VALUES (1, 1),
(2, 1),
(3, 2);
@startuml
entity Students {
*Id
Name
BirthYear
Phone
Address
index idx_students_name on (Name)
index idx_students_birthyear on (BirthYear)
}
entity Groups {
*Id
Name
Course
index idx_groups_name on (Name)
index idx_groups_course on (Course)
}
entity Students_Groups {
*StudentId
*GroupId
}
Students *--* Students_Groups
Groups *--* Students_Groups
@enduml
- "Справочник по SQL" Р.Коргана и Б.Джонса
- "Изучаем SQL" А.Либиса
- "Базы данных. Проектирование, реализация и применение" Дж.Гейтс