Skip to content

exam 11 2 2022 (second part)

Konstantin Alaev edited this page Dec 11, 2022 · 7 revisions

Понятия базы и структуры данных (Алаев КВ ИДБ-19-05 2022)

Реферат к лекции 11 (27). Базы Данных


Проверила: Никитина А.С. ИДБ-19-05

Выполнил: Алаев К.В. ИДБ-19-05


Введение

Базы данных - это системы, которые хранят и обрабатывают большие объемы информации. Они используются во многих различных областях, включая бизнес, науку и технологии.

Базы данных обычно создаются с целью упрощения хранения и обработки больших объемов информации. Они могут быть использованы для хранения информации о продуктах, клиентах, сотрудниках и многом другом.

Существует разные типы баз данных, включая реляционные, объектно-ориентированные и документо-ориентированные. Каждый тип базы данных имеет свои собственные функции и особенности, которые подходят для решения различных задач.

Для работы с базами данных необходимо использовать специальное программное обеспечение, называемое СУБД (Система Управления Базами Данных). С помощью СУБД можно создавать, изменять и управлять базами данных, а также выполнять различные операции с данными, например, запросы и анализ.

В базах данных данные хранятся в структурированном виде, что позволяет легко их извлекать и обрабатывать. Это упрощает работу с информацией и позволяет сохранять ее в удобном и доступном виде.

В заключение, базы данных - это важные инструменты для хранения и обработки информации. Они помогают обеспечить эффективное управление информацией и облегчают доступ к ней.

Понятия базы данных

В базе данных есть несколько основных понятий, которые необходимо знать для ее понимания и работы с ней.

Структура базы данных - это набор таблиц, связей между ними и других объектов, которые определяют, как информация будет храниться в базе данных.

Таблица - это основная структура данных в базе данных, которая содержит строки и столбцы. Каждая строка таблицы содержит информацию об одном объекте, а каждый столбец содержит информацию об одном свойстве этого объекта.

Первичный ключ - это уникальное поле или набор полей, которое используется для идентификации каждой строки таблицы. Первичный ключ используется для создания связей между таблицами и обеспечения уникальности всех записей в таблице.

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

Запрос - это операция, которая используется для извлечения информации из базы данных. Запросы могут быть очень разнообразными, от простого извлечения определенной информации до сложных операций анализа и обработки данных.

Понятие схемы базы данных

Схема базы данных - это логическое представление структуры данных в базе данных. Она описывает, какие таблицы есть в базе данных, какие поля в каждой таблице и какие связи существуют между таблицами.

Схема базы данных важна для понимания того, какие данные хранятся в базе и каким образом они связаны между собой. Она помогает спроектировать базу данных таким образом, чтобы она была максимально эффективной и гибкой для использования.

Схема базы данных обычно представлена в виде диаграммы, где таблицы представлены в виде прямоугольников, а связи между таблицами - в виде стрелок. Это позволяет визуально представить структуру базы данных и лучше понять, как она функционирует.

Схема как структура базы данных

Схема базы данных является логической структурой базы данных. Это означает, что она описывает то, какие данные хранятся в базе и как они связаны между собой, но не описывает точный способ хранения этих данных на физическом уровне.

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

Схема как объект базы данных

Схема базы данных также может быть понимается как объект базы данных. Это означает, что схема является частью базы данных и может быть манипулирована как любой другой объект в базе.

Например, схему можно создать, удалить, изменить или просмотреть как любой другой объект в базе данных. Также схему можно использовать в запросах и операциях анализа данных. Это позволяет эффективно управлять структурой базы данных и обеспечить ее гибкость и эффективность.

Уровни изоляции базы данных

Уровень изоляции базы данных - это степень, в которой операции с данными в базе данных изолированы друг от друга. Есть различные уровни изоляции, которые различаются степенью изоляции и имеют разные последствия для производительности и надежности базы данных.

Ниже приведены основные уровни изоляции базы данных с примерами:

  1. Чтение незафиксированных данных (Read Uncommitted): Это самый низкий уровень изоляции, при котором операции с данными могут быть выполнены даже в том случае, если другие операции еще не завершены. Это может привести к неконсистентности данных и ошибкам в работе базы данных.
  2. Чтение фиксированных данных (Read Committed) - это уровень изоляции, который гарантирует, что операции чтения данных будут выполнены только после завершения операций записи, которые модифицируют эти данные. Таким образом, чтение данных гарантируется консистентным и не будет возвращать некорректные или неполные данные. Этот уровень изоляции позволяет избежать проблем с неконсистентностью данных, которые могут возникнуть на низких уровнях изоляции, но он также может привести к более низкой производительности, так как операции чтения будут ожидать завершения операций записи.
  3. Повторяющееся чтение (Repeatable Read) - это уровень изоляции, который гарантирует, что операции чтения данных будут выполнены только после завершения всех операций записи, которые могут модифицировать эти данные. Таким образом, чтение данных гарантируется консистентным и не будет возвращать некорректные или неполные данные. Кроме того, на этом уровне изоляции гарантируется, что данные, которые были прочитаны в одной транзакции, не будут изменены другой транзакцией до завершения первой транзакции. Это защищает от ошибок, когда данные могут быть изменены другой транзакцией во время выполнения
  4. Упорядочиваемость (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 - это специальные структуры данных, которые используются для ускорения поиска и доступа к данным в базе данных. Индексы подобны указателям в книге - они содержат ссылки на определенные записи и позволяют быстро найти их.

В Postgres есть несколько типов индексов, в том числе поисковый индекс (B-Tree), индекс хеширования и индекс ближайшего соседа (k-d tree index). Какой из них использовать зависит от определенных условий, таких как тип данных, которые хранятся в базе данных, и способ их использования.

Создание индекса в Postgres производится с помощью команды CREATE INDEX. Например, чтобы создать индекс для таблицы customers, можно использовать следующий запрос:

CREATE INDEX idx_customers_name ON customers(name)

Этот запрос создаст индекс с именем idx_customers_name для колонки 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

image

Список литературы:

  1. "Справочник по SQL" Р.Коргана и Б.Джонса
  2. "Изучаем SQL" А.Либиса
  3. "Базы данных. Проектирование, реализация и применение" Дж.Гейтс
Clone this wiki locally