Теоретические разделы

  • Реляционные базы данных
    • Моделирование данных
    • Реализация БД
    • Применение БД
  • Нереляционные базы данных и NoSQL

Моделирование данных

  • Описание данных
    • Физическая модель
    • Модель сущность-связь
    • Функциональные зависимости и нормальные формы
  • Операции над данными
    • Реляционные алгебра и исчисление
    • Целостность и изменение данных

Реализация баз данных

  • Хранение данных и индексирование
  • Транзакции
  • Хранимые процедуры
  • Оптимизация запросов
  • Распределенные базы данных

Применение баз данных

  • Доступ к данным
  • Шаблоны работы с базами данных
  • Object-Relational Mapping
  • Шаблоны проектирования баз данных
  • Аналитическая обработка данных

Проектирование баз данных

  • Диаграммы сущность-связь
  • Физическая модель данных
  • Нормализация

SQL

  • Получение данных
  • Изменение данных
  • Определение структуры данных
  • Хранимые процедуры и функции

Особенности СУБД

  • Оценка планов исполнения запросов
  • Специфические виды запросов
  • Аналитические функции
  • NoSQL

Карма

  • Домашние задания
  • Разбор примеров на практике
  • Разбор домашних заданий
  • Вики-конспекты

Экзамен

  • Теория
    • Вопрос
    • Задача
  • Практика
    • Контрольная по запросам
    • Проект
    • Задача
  • Карма
    • До ±1 балл

Основная литература

  • Дейт К. Введение в системы баз данных
  • Уидом Д., Ульман Д. Основы реляционных баз данных
  • Гарсиа Молина Г., Ульман Д., Уидом Д. Системы баз данных полный курс
  • Gulutzan P., Pelzer T. SQL-99 complete, really

Дополнительная литература

  • Фаулер М. Архитектура корпоративных программных приложений
  • Эмблер С. В., Садаладж П. Дж. Рефакторинг баз данных. Эволюционное проектирование
  • Garcia-Molina H., Ullman J., Widom J. Database System Implementation

Требования к базам данных

Содержание

Разделение структуры и данных

  • Схема базы данных
    • Что хранится
    • Как хранится
    • Права доступа
  • Данные
    • 1 000 записей
    • 1 000 000 записей
    • 1 000 000 000 записей
    • 1 000 000 000 000 записей
  • Какая аналогия с ООП?
    • Классы и экземпляры

Типы данных (1)

  • Простые
    • Целое число
    • Дата
    • Фамилия
  • Структурированные
    • Адрес
    • Телефон

Типы данных (2)

  • Сущности
    • Студент
    • Группа
    • Предмет
  • Связи сущностей
    • Студент учится в группе
    • Оценка студента по предмету

Ограничения целостности

  • На отдельные значения
    • Возраст – целое положительное число
    • Вероятность – вещественное число от 0 до 1
  • На записи
    • Начало интервала меньше его конца
  • На наборы записей
    • Номера паспортов не повторяются
  • На связи данных
    • Студент учится ровно в одной группе

Модель данных простого файла

  • Структура
    • Заголовок (названия столбцов)
    • Данные (просто текст)
  • Пример
    ФИО,Предмет,Оценка
    Иванов И.И.,Java,4
    Иванов И.И.,Базы данных,5
    Петров П.П.,Java,5
    Петров П.П.,Базы данных,4
    

Модель данных структур. файла

  • Структура
    • Заголовок (названия столбцов, типы и длины)
    • Данные (записи одинаковой структуры)
  • Пример
    ФИО           Предмет     Оценка
    String, 14    String, 12  Number, 1
    Иванов И.И.   Java          4
    Иванов И.И.   Базы данных   5
    Петров П.П.   Java          5
    Петров П.П.   Базы данных   4
    

Достоинства и недостатки

  • Достоинства
    • Простота чтения
  • Недостатки
    • Сложность поиска
    • Сложность обработки
    • Сложность хранения данных разных типов
    • Нет проверки целостности
  • Реализации
    • Данные на перфокартах
    • dBase
    • Excel / LibreOffice Calc

Файловая модель данных

  • Представление данных
    • Файл – одна запись
    • Каталоги – подчиненные записи
  • Пример
    • Иванов И.И./Данные – ФИО, адрес, etc
    • Иванов И.И./Оценки/Java – 4
    • Иванов И.И./Оценки/Базы данных – 5
    • Петров П. П./Данные – ФИО, адрес, etc
    • Иванов П. П./Оценки/Java – 5
    • Петров П. П./Оценки/Базы данных – 4

Достоинства и недостатки

  • Достоинства
    • Структурирование данных
    • Простота реализации
  • Недостатки
    • Сложно извлекать требуемые данные
    • Нет проверки целостности
    • Большое количество файлов
  • Реализации

Иерархическая модель данных

  • Предложена и реализована IBM в 1966
  • Представление данных
    • Дерево записей
    • Отношения родитель – ребенок

Достоинства и недостатки

  • Достоинства
    • Проверка целостности записей и отношений
    • Последовательное расположение записей
    • Эффективность реализации
  • Недостатки
    • Представление только древовидных данных
    • Нет отношения многие-ко-многим
  • Реализации

Сетевая модель данных

  • Предложена CODASYL в 1969
  • Представление данных
    • Ориентированный граф записей
    • Отношения владелец – запись

Достоинства и недостатки

  • Достоинства
    • Представление всех типов связей
    • Возможность описания структуры
    • Эффективность реализации
  • Недостатки
    • Сложность реализации
    • Жесткое ограничение структуры
  • Реализации

Реляционная модель данных

  • Предложена Э. Ф. Коддом в 1969
  • Структура
    • Данные хранятся в таблицах
    • Проверка целостности заданных связей
    • Связи задаются в запросах

Достоинства и недостатки

  • Достоинства
    • Представление всех типов связей
    • Гибкая структура данных
    • Математическая модель
  • Недостатки
    • Сложность реализации
    • Сложность представления иерархических данных
    • Сложность составления эффективных запросов
  • Реализации

Объектная модель данных

  • Предложена в 1985
  • Структура
    • Сущность – объект
    • Связь – поле
    • Ограничения целостности – определение объекта

Достоинства и недостатки

  • Достоинства
    • Простота представления объектов
    • Гибкая структура данных
    • «Логичное» направление ссылок
  • Недостатки
    • Сложность реализации
    • Сложность миграции схемы
    • Малая распространенность
  • Реализации

Не (только) SQL

  • Предложен в 1998
  • Типы
    • Документ-ориентированные
    • Ключ-значение
    • Табличные и столбчатые
    • Графовые

Документ-ориентированные

  • Представление данных
    • Слабоструктурированные документы
      • XML
      • JSON
    • Выборка по свойствам

Ключ-значение

  • Представление данных
    • Ключ
    • Произвольное значение

Другие

  • Табличные
    • Одна большая таблица
    • Хранится построчно
  • Столбчатые
    • Одна большая таблица
    • Хранится по столбцам
  • Графовые
    • Граф объектов
    • Данные в узлах
    • Данные на ребрах

Достоинства и недостатки

  • Достоинства
    • Большой выбор
    • Гибкость
    • Скорость работы
  • Недостатки
    • Множество вещей делается в коде
    • Нет оптимизатора
    • Легко ошибиться

Архитектура РСУБД

Содержание

Общий план

Взаимодействие с СУБД

Обработка запроса

Общая архитектура

Oracle

  • Oracle (Oracle)
  • Особенности
    • Высокая пропускная способность
    • Невысокая скорость обновления
    • Очень большая
    • Широко распространена в бизнес-среде
  • http://www.oracle.com/database/

DB2

  • DB2 (IBM)
  • Особенности
    • Ориентация на «большие» машины
    • Мало распространена в России
    • Неполная совместимость с SQL
    • Большое внимание обработке ошибок
  • http://www.ibm.com/db2

MS SQL Server

MySQL

PostgreSQL

  • PostgreSQL (Berkeley U, PostgreSQL)
  • Особенности
    • BSD License
    • Непосредственная поддержка связей
    • Объектные расширения
  • https://www.postgresql.org/

Firebird

  • Firebird (Borland, Firebird)
  • Особенности
    • Оригинальная лицензия
    • Допускает встраивание
  • http://www.firebirdsql.org/

SQLite

  • SQLite (sqlite.org)
  • Особенности
    • Public Domain
    • Не поддерживает целостность
    • Ограниченная реализация SQL-92
    • In-memory mode
    • Компактна
  • http://www.sqlite.org/

Apache Derby

  • Derby (Cloudscape, IBM, Apache)
  • Особенности
    • Apache License
    • Pure Java
    • Особенности DB2
    • In-memory mode
  • http://db.apache.org/derby/

HSQLDB

  • HyperSQLDB (hsqldb.org)
  • Особенности
    • BSD License
    • Pure Java
    • Не поддерживает транзакции
    • In-memory mode
  • http://hsqldb.org/

Access

  • Access (Microsoft)
  • Особенности
    • Проприетарная
    • Совмещение СУБД и RAD
    • «Встраиваемые приложения»
  • http://office.microsoft.com/access

SQL

  • Structured Query Language
  • Стандартизован ISO
    • Поддерживается почти всеми
    • Не поддерживается никем

SQL-86

  • SQL 1
  • Возможности
    • Простые запросы
    • Простые соединения
    • Контроль доступа
    • Курсоры

SQL-92

  • SQL 2
  • Возможности
    • Новые типы соединений
    • Динамические запросы
    • Уровни изоляции транзакций
    • Call Level Interface

SQL:1999

  • SQL 3
  • Особенности
    • Новая структура стандарта
    • Необязательные требования
    • Логический тип данных
    • Object Language Binding, SQLJ

SQL:2003

  • Дополнения
    • XML
    • Генераторы последовательностей
    • Автогенерируемые значения
    • Управление слиянием данных
    • Оконные функции

SQL:2006+

  • SQL:2006, SQL:2008
    • Поддержка XQuery
    • Много мелочей
  • SQL:2011
    • Темпоральные данные
  • SQL:2016
    • JSON
    • Регулярные выражения
    • Форматирование дат и времени
  • SQL:2023
    • Property Graph Queries

Создание базы данных

  • Создание базы данных
    create database CTD;
    
  • Смена базы данных
    use CTD;
    

Создание таблиц

create table Groups (
    group_id int,
    group_no char(6)
);
create table Students (
    student_id int,
    name varchar(50),
    group_id int
);

Вставка данных

insert into Groups
    (group_id, group_no) values
    (1, 'M34351'),
    (2, 'M34391');
insert into Students
    (student_id, name, group_id) values
    (1, 'Alexey Grunsky', 2),
    (2, 'Vitaly Egorov', 2),
    (3, 'Elvira Minko', 1);

Получение данных

  • Список групп
    • select group_id, group_no from Groups;
      
  • Список студентов
    • select student_id, name, group_id from Students;
      
  • Список студентов и групп
    • select name, group_no from Students natural join Groups;
      
    • select Students.name, Groups.group_no
          from Students
               inner join Groups
               on Students.group_id = Groups.group_id;
      

Обновление данных

  • Виталий Егоров в M3435
  • Переведём
    • По student_id
      update Students
          set group_id = 1
          where student_id = 2;
      
    • По name
      update Students
          set group_id = 1
          where name = 'Vitaly Egorov';
      

Повторяющийся идентификатор

  • Добавить
    • insert into Groups (group_id, group_no) values
          (1, 'M34311');
      
  • Почему это плохо?
    • Дубли
    • Противоречия
  • Удалить противоречия
    • delete from Groups where group_no = 'M34311';
      
  • Запретить
    • alter table Groups
          add constraint group_id_unique unique (group_id);
      
  • Проверить

Несуществующий идентификатор

  • Добавить
    • update Students set group_id = 5 where student_id = 2;
      
  • Почему это плохо?
    • Потеря информации
    • Противоречия
  • Удалить противоречия
    • update Students set group_id = 1 where student_id = 2;
      
  • Запретить
    • alter table Students add foreign key (group_id)
          references Groups (group_id);
      
  • Проверить

Вопросы

???