Фёдор Строк - Базы данных - sql, orm, nosql
TRANSCRIPT
![Page 1: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/1.jpg)
![Page 2: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/2.jpg)
Федор Строк
Базы данных: SQL, ORM, NoSQL
![Page 3: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/3.jpg)
3
План
1.Основные определения
2.Коротко о проектировании
3.SQL: основные конструкции
4.ORM
5.NoSQL
![Page 4: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/4.jpg)
Определения
База данных
Система управления базами данных
Банк данных
![Page 5: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/5.jpg)
Основные определения
![Page 6: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/6.jpg)
Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
![Page 7: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/7.jpg)
Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Система управления базами данных (СУБД) — совокупность
программных и лингвистических средств общего или специального
назначения, обеспечивающих управление созданием и
использованием баз данных
![Page 8: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/8.jpg)
Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Система управления базами данных (СУБД) — совокупность
программных и лингвистических средств общего или специального
назначения, обеспечивающих управление созданием и
использованием баз данных
Банк Данных - совокупность одной или нескольких баз данных и средств
управления (манипулирования) данными
![Page 9: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/9.jpg)
Простыми словам
База данных - это набор информации, которую вы храните.
Система управления базами данных (СУБД) — это программа, которая
предоставляет доступ внешним приложениям к базе данных,
обеспечивает ее работу.
![Page 10: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/10.jpg)
История БД
![Page 11: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/11.jpg)
Теория баз данных
1.Молодая дисциплина ~30 лет
2.К 2020 году 40 зеттабайт (1021) (424
авианосца дисков Blue-ray)
![Page 12: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/12.jpg)
Области вычислительной техники
1.Выполнение численных расчетов
2.Автоматические или автоматизированные
информационные системы – Хранение информации
– Бизнес-логика
– Интерфейс
– Появилась позже (медленные устройства хранения)
![Page 13: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/13.jpg)
Нулевой этап
1.Шумерские глиняные
таблицы
![Page 14: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/14.jpg)
![Page 15: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/15.jpg)
Файловые системы
1.persistence – возможность сохранить
состояние программы между запусками
2.hosts – текстовый файл, хранящий БД
доменных имен. Имеет приоритет над DNS,
контролируется администратором
компьютера
3.127.0.0.1 localhost
81.176.66.163 lib.ru
81.176.66.163 www.lib.ru
69.16.226.196 www.qsl.net
![Page 16: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/16.jpg)
Файловые системы
1.Избыточность данных
2.Несогласованность данных
3.Зависимость структур данных и
прикладных программ
4.Зависимость программ от данных – точно знать структуру записи файла с точностью до бита
5.Отсутствие централизованного управления
доступом
6.Многопользовательский режим
![Page 17: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/17.jpg)
БД на больших ЭВМ
1.1968 - первая промышленная СУБД
система Information Management System
фирмы IBM – иерархическая (бд, сегмент,
поле)
2.Основные принципы: – Централизованная БД в режиме распределенного доступа
(управление доступом)
– ОС отвечает за распределение ресурсов
– Языки низкого уровня для манипулирования
– Много администрирования
– Обоснование и формализация реляционной модели (избыточность
данных)
– Понятие транзакции
– Первые языки высокого уровня для реляционной модели
(зависимость от данных в программах)
![Page 18: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/18.jpg)
Эпоха ПК
1.Монопольный доступ
2.Развитый и удобный интерфейс
3.Поддержка и SQL, и низкоуровневого
манипулирования
4.Нет ссылочной и структурной целостности
5.Скромные требования к железу
![Page 19: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/19.jpg)
Распределенные БД
1.Поддержка структурной целостности
2.Языковая целостность SQL
3.Ссылочная целостность
4.Поддержка многоплатформенной
архитектуры
5.Многопользовательская работа
6.Стандарты в SQL
7.Появление объектно-ориентированных БД
![Page 20: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/20.jpg)
Проектирование БД
![Page 21: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/21.jpg)
Основные этапы проектирования
![Page 22: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/22.jpg)
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
![Page 23: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/23.jpg)
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
![Page 24: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/24.jpg)
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
3.Даталогическое моделирование
![Page 25: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/25.jpg)
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
3.Даталогическое моделирование
4.Физическое проектирование
![Page 26: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/26.jpg)
Системный анализ
![Page 27: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/27.jpg)
Системный анализ
1.Выделить объекты и связи между ними
![Page 28: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/28.jpg)
Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода: – Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
![Page 29: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/29.jpg)
Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода: – Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
3.На практике – компромиссные варианты
![Page 30: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/30.jpg)
Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода: – Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
3.На практике – компромиссные варианты
4.На выходе подробное описание:
входные/выходные документы, задачи,
алгоритмы
![Page 31: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/31.jpg)
Инфологическая модель
1.Модель сущность-связь
2.Нотация Чена
3.Нотация Crow’s foot
![Page 32: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/32.jpg)
Нотация Чена
![Page 33: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/33.jpg)
Crow’s foot
![Page 34: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/34.jpg)
Пример
1.БД для школы
![Page 35: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/35.jpg)
Пример
![Page 36: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/36.jpg)
Даталогическое моделирование
1.Разработка схемы БД
2.Правила целостности
3.Схема БД на основе реляционности
![Page 37: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/37.jpg)
Реляционность
1.Данные в бд – набор отношений
2.Отношения отвечают условиям
целостности
3.Поддержка операторов манипулирования
(реляционная алгебра)
![Page 38: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/38.jpg)
Нормальные Формы
1.1NF
2.2NF
3.3NF
4.BCNF
5.4NF
6.5NF
7.DKNF
8.6NF
![Page 39: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/39.jpg)
1NF
Переменная отношения находится в первой нормальной форме тогда и
только тогда, когда в любом допустимом значении отношения каждый его
кортеж содержит только одно значение для каждого из атрибутов.
login E-mail
fdrstrok [email protected] [email protected]
vasya [email protected]
login E-mail
fdrstrok [email protected]
fdrstrok [email protected]
vasya [email protected]
![Page 40: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/40.jpg)
2NF
Переменная отношения находится во второй нормальной форме тогда и
только тогда, когда она находится в первой нормальной форме и каждый
неключевой атрибут неприводимо зависит от её потенциального ключа
Сотрудник Должность Зарплата Наличие компьютера
Гришин Кладовщик 20000 Нет
Васильев Программист 40000 Есть
Иванов Кладовщик 25000 Нет
Сотрудник Должность Зарплата
Гришин Кладовщик 20000
Васильев Программист 40000
Иванов Кладовщик 25000
Должность Наличие компьютера
Кладовщик Нет
Программист Есть
![Page 41: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/41.jpg)
3NF
Переменная отношения R находится в 3NF тогда и только тогда, когда
выполняются следующие условия:
- R находится во второй нормальной форме.
- ни один неключевой атрибут R не находится в транзитивной
функциональной зависимости от потенциального ключа R.
Tournament Year Winner Winner Date of Birth
Indiana Invitational 1998 Al Fredrickson 21 July 1975
Cleveland Open 1999 Bob Albertson 28 September 1968
Des Moines Masters 1999 Al Fredrickson 21 July 1975
Indiana Invitational 1999 Chip Masterson 14 March 1977
Tournament Year Winner
Indiana Invitational 1998 Al Fredrickson
Cleveland Open 1999 Bob Albertson
Des Moines Masters 1999 Al Fredrickson
Indiana Invitational 1999 Chip Masterson
Winner Date of Birth
Chip Masterson 14 March 1977
Al Fredrickson 21 July 1975
Bob Albertson 28 September 1968
![Page 42: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/42.jpg)
42
Денормализация
![Page 43: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/43.jpg)
43
Денормализация
1.Операция соединения – долгая
![Page 44: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/44.jpg)
44
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
![Page 45: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/45.jpg)
45
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
![Page 46: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/46.jpg)
46
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
4.Рекомендуется для БД, ориентированных
только на чтение
![Page 47: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/47.jpg)
47
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
4.Рекомендуется для БД, ориентированных
только на чтение
5.Можно замедлить другие запросы
![Page 48: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/48.jpg)
SQL
История
Основные операторы
Трехзначная логика
![Page 49: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/49.jpg)
49
История SQL
1.1970, IBM, SEQUEL (Structured English
QUEry Language)
2.1986 первый вариант стандарта SQL-86
3.1989 доработки SQL-89
4.1992 значительные изменения
5.1999 регулярные выражения, рекурсивные
запросы, триггеры
6.2003 XML
7.2006 SQL+XQuery
8.2008 устранение неоднозначностей
![Page 50: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/50.jpg)
50
MySQL vs MSSQL
• Order by – Mysql: есть недокументированная особенность с Null при минусе
перед именем столбца
• Boolean – MySQL: tinyint(1)
– MSSQL: Bit
• Char – MySQL: обрезает пробелы в конце
– MSSQL: обрезает их перед вызовами некоторых функций
• Подробнее, и не только про
MSSQL&MySQL:
http://troels.arvin.dk/db/rdbms/
![Page 51: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/51.jpg)
51
DDL
Язык описания структуры БД
1.CREATE
2.ALTER
3.DROP
4.GRANT ALL ON *.* TO
'someuser'@'somehost';
![Page 52: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/52.jpg)
52
DROP,CREATE
DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `id` int(11) DEFAULT NULL, `grade` int(11) NOT NULL, `letter` char(1) NOT NULL, `teacher_id` int(11) NOT NULL, UNIQUE KEY `id` (`id`), CONSTRAINT `class_ibfk_1` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`)) ON DELETE
CASCADE;
![Page 53: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/53.jpg)
53
ALTER
ALTER TABLE class ADD COLUMN `head_id` int(11) NOT NULL; ALTER TABLE class MODIFY letter char(2) NOT NULL DEFAULT ‘A’;
![Page 54: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/54.jpg)
54
DML
Язык управления данными
1.Select
2. Insert
3.Update
4.Delete
![Page 55: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/55.jpg)
55
INSERT
INSERT INTO class VALUES (1,9,'A',1);
INSERT INTO class(id,grade,letter,teacher_id) VALUES(2,9,'B',2),(3,9,'C',3);
INSERT IGNORE INTO class(id,grade,letter,teacher_id) VALUES(2,9,'B',3),(4,10,'A',3);
INSERT INTO class(id,grade,letter,teacher_id) VALUES(2,9,'B',3) on duplicate key update teacher_id=values(teacher_id);
![Page 56: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/56.jpg)
56
UPDATE
UPDATE class SET head_id = 0; UPDATE class SET letter='A' WHERE id = 3;
![Page 57: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/57.jpg)
57
SELECT
SELECT * FROM class; SELECT * FROM section JOIN teacher ON section.teacher_id = teacher.id; SELECT name,count(*) FROM section LEFT JOIN section_pupil ON section_pupil.section=section.id GROUP BY name;
![Page 58: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/58.jpg)
58
Join
JOIN — оператор языка SQL, который
является реализацией операции соединения
реляционной алгебры
Итоговая схема – сцепление схем
Итоговые кортежи – сцепление строк таблиц
![Page 59: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/59.jpg)
59
Join
Виды:
- Inner
- Left
- Right
- Full outer
- Cross
Фамилия Группа
Иванов 1
Петров 2
Сидоров 1
Васильев 3
Группа Название
1 171
2 241
4 172
![Page 60: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/60.jpg)
60
CROSS
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 1 171
Сидоров 1 1 171
Васильев 3 1 171
Иванов 1 2 241
Петров 2 2 241
Сидоров 1 2 241
Васильев 3 2 241
Иванов 1 4 172
Петров 2 4 172
Сидоров 1 4 172
Васильев 3 4 172
![Page 61: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/61.jpg)
61
INNER
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
![Page 62: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/62.jpg)
62
LEFT
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
Васильев 3 NULL NULL
![Page 63: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/63.jpg)
63
RIGHT
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
NULL NULL 4 172
![Page 64: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/64.jpg)
64
FULL OUTER
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
NULL NULL 4 172
Васильев 3 NULL NULL
![Page 65: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/65.jpg)
65
CCL
Язык управления курсорами
1.Declare
2.Open
3.Fetch
4.Close
![Page 66: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/66.jpg)
66
DCL
1.Язык работы с правами доступа
2.Grant
3.Revoke
4.GRANT SELECT, INSERT ON mydb.* TO
'someuser'@'somehost';
![Page 67: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/67.jpg)
67
Хранимые процедуры
1.Операторы уже в БД
2.Оптимизация и компиляция на стороне
сервера
3.Поддерживают модульное
программирование
4.Можно вызывать «снаружи»
5.Быстрее
![Page 68: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/68.jpg)
68
Триггеры
1.Хранимая процедура особого типа – После insert, delete, update
2.Обеспечение целостности и сложная
бизнес логика
3.Запускается автоматически сервером
4.До или после события
5.Не надо пересылать через сеть
дополнительные команды
![Page 69: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/69.jpg)
69
Транзакции
1.Пример – перевод средств со счета на счет
2.Требование ACID
3.Атомарность
4.Согласованность – Списываемая сумма = зачисляемой сумме
5.Изолированность
6.Надежность
![Page 70: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/70.jpg)
70
Транзакции: TCL
1.COMMIT
2.ROLLBACK
3.SAVEPOINT
4.START TRANSACTION
![Page 71: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/71.jpg)
ORM
![Page 72: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/72.jpg)
Что и зачем?
1.Технология, связывающая БД и ООП
2.По сути: построить по объектам структуру
хранения в БД, чтобы можно было
восстанавливать свойства
3.Хочется не зависеть от «наречия» SQl
![Page 73: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/73.jpg)
SQLAlchemy
1.Python, SQL, ORM
![Page 74: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/74.jpg)
Необходимые импорты для создания таблиц:
Подготовка
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
engine = create_engine('sqlite:///mymusic.db', echo=True)
Base = declarative_base()
![Page 75: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/75.jpg)
Музыкант
class Artist(Base):
__tablename__ = "artists"
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
![Page 76: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/76.jpg)
Альбом
class Album(Base):
__tablename__ = "albums"
id = Column(Integer, primary_key=True)
title = Column(String)
release_date = Column(Date)
publisher = Column(String)
media_type = Column(String)
artist_id = Column(Integer, ForeignKey("artists.id"))
artist = relationship("Artist",backref=backref("albums", order_by=id))
def __init__(self, title, release_date, publisher, media_type):
self.title = title
self.release_date = release_date
self.publisher = publisher
self.media_type = media_type
Base.metadata.create_all(engine)
![Page 77: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/77.jpg)
Добавление данных
engine = create_engine('sqlite:///mymusic.db', echo=True)
# create a Session
Session = sessionmaker(bind=engine)
session = Session()
# Create an artist
new_artist = Artist("Newsboys")
new_artist.albums = [
Album("Read All About It", datetime.date(1988,12,01), "Refuge", "CD")
]
session.add(new_artist)
session.commit()
![Page 78: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/78.jpg)
Модификация данных
from table_def import Album, Artist
engine = create_engine('sqlite:///mymusic.db', echo=True)
# create a Session
Session = sessionmaker(bind=engine)
session = Session()
# querying for a record in the Artist table
res = session.query(Artist).filter(Artist.name=="Kutless").first()
print res.name
# changing the name
res.name = "Beach Boys"
session.commit()
![Page 79: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/79.jpg)
Удаление данных
engine = create_engine('sqlite:///mymusic.db', echo=True)
# create a Session
Session = sessionmaker(bind=engine)
session = Session()
res = session.query(Artist).filter(Artist.name=="MXPX").first()
session.delete(res)
session.commit()
![Page 80: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/80.jpg)
Выборка данных
# how to do a SELECT * (i.e. all)
res = session.query(Artist).all()
for artist in res:
print artist.name
# how to SELECT the first result
res = session.query(Artist).filter(Artist.name=="Newsboys").first()
# how to sort the results (ORDER_BY)
res = session.query(Album).order_by(Album.title).all()
for album in res:
print album.title
![Page 81: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/81.jpg)
Django ORM
1.Python, SQL, ORM
2.Чуть более ограничен
3.Нетривиально использовать только ORM
![Page 82: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/82.jpg)
Django ORM (без Django )
#!/usr/bin/python
# -*- coding: utf-8 -*-
from django.conf import settings
settings.configure( DATABASES = {
'default': { 'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db.sqlite', }
} )
from django.db import models
class Person(models.Model):
nick = models.CharField(max_length=100, unique=True)
email = models.EmailField(max_length=100, unique=True)
def __unicode__(self):
return self.nick
class Meta: app_label = ''
![Page 83: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/83.jpg)
Django ORM (без Django )
def create_table(cls):
from django.db import connection
from django.core.management.color import no_style
sql, references = connection.creation.sql_create_model(cls, no_style())
cursor = connection.cursor()
for q in sql:
try:
cursor.execute(q)
except:
pass
def main():
create_table(Person)
if __name__ == "__main__": main()
![Page 84: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/84.jpg)
NOSQL
![Page 85: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/85.jpg)
85
Примеры по типам
1.WideColumn – Hadoop
– Cassandra
2.Document – MongoDB
– CouchDB
3.Key Value/Tuple – Redis
– Elliptics
– memcached
4.Graph Databases – Neo4j
5.Etc.
![Page 86: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/86.jpg)
86
MongoDB
1.Схема данных заранее может быть
неизвестна
2.Эффективно использует доступную память
3.Простой orm для python
4.Используем
![Page 87: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/87.jpg)
87
> j = { name: "mongo" }
{ "name" : "mongo" }
> k = { x: 3}
{ "x" : 3 }
> l = {x: 3, y: false}
{ "x" : 3, "y" : false }
> db.testData.insert(j)
> db.testData.insert(k)
> db.testData.insert(l)
> db.testData.find()
{ "_id" : ObjectId("532ef8c23250ec8ece76df6f"), "name" : "mongo" }
{ "_id" : ObjectId("532ef8c73250ec8ece76df70"), "x" : 3 }
{ "_id" : ObjectId("532ef8cb3250ec8ece76df71"), "x" : 3, "y" : false }
> db.testData.find({x: 18})
> db.testData.findOne({x: 3})
{ "_id" : ObjectId("532ef8c73250ec8ece76df70"), "x" : 3 }
> db.testData.find().limit(2)
{ "_id" : ObjectId("532ef8c23250ec8ece76df6f"), "name" : "mongo" }
{ "_id" : ObjectId("532ef8c73250ec8ece76df70"), "x" : 3 }
MongoDB
![Page 88: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/88.jpg)
88
MapReduce
1.Модель распределенных вычислений
2.Данные шардируются и реплицируются
3.Позволяет обрабатывать Большие данные
4.Данные неоднородные
![Page 89: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/89.jpg)
89
На Map-шаге происходит предварительная обработка входных данных.
На Reduce-шаге происходит свёртка предварительно обработанных данных.
Главный узел получает ответы от рабочих узлов и на их основе формирует
результат — решение задачи, которая изначально формулировалась.
void map(String name, String document):
for each word w in document:
EmitIntermediate(w, "1");
void reduce(String word, Iterator partialCounts):
int result = 0;
for each v in partialCounts:
result += parseInt(v);
Emit(AsString(result));
Map & Reduce
![Page 90: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/90.jpg)
90
MapReduce: общие друзья
1.A -> B C D
2.B -> A C D E
3.C -> A B D E
4.D -> A B C E
5.E -> B C D
![Page 91: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/91.jpg)
91
MapReduce: map
1.A -> B C D – (A B) -> B C D
– (A C) -> B C D
– (A D) -> B C D
2. ...
3.E -> B C D – (B E) -> B C D
– (C E) -> B C D
– (D E) -> B C D
![Page 92: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/92.jpg)
92
MapReduce: map output
1. (A B) -> (A C D E) (B C D)
2. (A C) -> (A B D E) (B C D)
3. (A D) -> (A B C E) (B C D)
4. (B C) -> (A B D E) (A C D E)
5. (B D) -> (A B C E) (A C D E)
6. (B E) -> (A C D E) (B C D)
7. (C D) -> (A B C E) (A B D E)
8. (C E) -> (A B D E) (B C D)
9. (D E) -> (A B C E) (B C D)
![Page 93: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/93.jpg)
93
MapReduce: reduce
1.Найти общих в двух списках
2.Reduce((A D) -> (A B C E) (B C D)) => (B C)
![Page 94: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/94.jpg)
94
MapReduce: reduce output
1. (A B) -> (C D)
2. (A C) -> (B D)
3. (A D) -> (B C)
4. (B C) -> (A D E)
5. (B D) -> (A C E)
6. (B E) -> (C D)
7. (C D) -> (A B E)
8. (C E) -> (B D)
9. (D E) -> (B C)
![Page 95: Фёдор Строк - Базы данных - SQL, ORM, NoSQL](https://reader034.vdocuments.pub/reader034/viewer/2022052218/557ef317d8b42aa30a8b4bc4/html5/thumbnails/95.jpg)
95
Внеклассное чтение
1.Проектирование: – К. Дж. Дейт: Введение в системы баз данных
– Д. Кренке. Теория и практика построения баз данных.
2.SQL упражнения: http://sql-ex.ru/ +
http://www.sql-tutorial.ru/
3.Mongo: https://education.mongodb.com/