6. Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
7. Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Система управления базами данных (СУБД) — совокупность
программных и лингвистических средств общего или специального
назначения, обеспечивающих управление созданием и
использованием баз данных
8. Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Система управления базами данных (СУБД) — совокупность
программных и лингвистических средств общего или специального
назначения, обеспечивающих управление созданием и
использованием баз данных
Банк Данных - совокупность одной или нескольких баз данных и средств
управления (манипулирования) данными
9. Простыми словам
База данных - это набор информации, которую вы храните.
Система управления базами данных (СУБД) — это программа, которая
предоставляет доступ внешним приложениям к базе данных,
обеспечивает ее работу.
11. Теория баз данных
1.Молодая дисциплина ~30 лет
2.К 2020 году 40 зеттабайт (1021) (424
авианосца дисков Blue-ray)
12. Области вычислительной техники
1.Выполнение численных расчетов
2.Автоматические или автоматизированные
информационные системы
– Хранение информации
– Бизнес-логика
– Интерфейс
– Появилась позже (медленные устройства хранения)
15. Файловые системы
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
16. Файловые системы
1.Избыточность данных
2.Несогласованность данных
3.Зависимость структур данных и
прикладных программ
4.Зависимость программ от данных
– точно знать структуру записи файла с точностью до бита
5.Отсутствие централизованного управления
доступом
6.Многопользовательский режим
17. БД на больших ЭВМ
1.1968 - первая промышленная СУБД
система Information Management System
фирмы IBM – иерархическая (бд, сегмент,
поле)
2.Основные принципы:
– Централизованная БД в режиме распределенного доступа
(управление доступом)
– ОС отвечает за распределение ресурсов
– Языки низкого уровня для манипулирования
– Много администрирования
– Обоснование и формализация реляционной модели (избыточность
данных)
– Понятие транзакции
– Первые языки высокого уровня для реляционной модели
(зависимость от данных в программах)
18. Эпоха ПК
1.Монопольный доступ
2.Развитый и удобный интерфейс
3.Поддержка и SQL, и низкоуровневого
манипулирования
4.Нет ссылочной и структурной целостности
5.Скромные требования к железу
19. Распределенные БД
1.Поддержка структурной целостности
2.Языковая целостность SQL
3.Ссылочная целостность
4.Поддержка многоплатформенной
архитектуры
5.Многопользовательская работа
6.Стандарты в SQL
7.Появление объектно-ориентированных БД
25. Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
3.Даталогическое моделирование
4.Физическое проектирование
28. Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода:
– Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
29. Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода:
– Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
3.На практике – компромиссные варианты
30. Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода:
– Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
3.На практике – компромиссные варианты
4.На выходе подробное описание:
входные/выходные документы, задачи,
алгоритмы
39. 1NF
Переменная отношения находится в первой нормальной форме тогда и
только тогда, когда в любом допустимом значении отношения каждый его
кортеж содержит только одно значение для каждого из атрибутов.
login E-mail
fdrstrok Fdr.strok@yandex.ru
fdrstrok@yandex-team.ru
vasya Vasya.pupkin@yandex.ru
login E-mail
fdrstrok Fdr.strok@yandex.ru
fdrstrok fdrstrok@yandex-team.ru
vasya Vasya.pupkin@yandex.ru
40. 2NF
Переменная отношения находится во второй нормальной форме тогда и
только тогда, когда она находится в первой нормальной форме и каждый
неключевой атрибут неприводимо зависит от её потенциального ключа
Сотрудник Должность Зарплата Наличие компьютера
Гришин Кладовщик 20000 Нет
Васильев Программист 40000 Есть
Иванов Кладовщик 25000 Нет
Сотрудник Должность Зарплата
Гришин Кладовщик 20000
Васильев Программист 40000
Иванов Кладовщик 25000
Должность Наличие компьютера
Кладовщик Нет
Программист Есть
41. 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
45. 45
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
46. 46
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
4.Рекомендуется для БД, ориентированных
только на чтение
47. 47
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
4.Рекомендуется для БД, ориентированных
только на чтение
5.Можно замедлить другие запросы
49. 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 устранение неоднозначностей
50. 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/
55. 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);
57. 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;
58. 58
Join
JOIN — оператор языка SQL, который
является реализацией операции соединения
реляционной алгебры
Итоговая схема – сцепление схем
Итоговые кортежи – сцепление строк таблиц
59. 59
Join
Виды:
- Inner
- Left
- Right
- Full outer
- Cross
Фамилия Группа
Иванов 1
Петров 2
Сидоров 1
Васильев 3
Группа Название
1 171
2 241
4 172
60. 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
66. 66
DCL
1.Язык работы с правами доступа
2.Grant
3.Revoke
4.GRANT SELECT, INSERT ON mydb.* TO
'someuser'@'somehost';
67. 67
Хранимые процедуры
1.Операторы уже в БД
2.Оптимизация и компиляция на стороне
сервера
3.Поддерживают модульное
программирование
4.Можно вызывать «снаружи»
5.Быстрее
68. 68
Триггеры
1.Хранимая процедура особого типа
– После insert, delete, update
2.Обеспечение целостности и сложная
бизнес логика
3.Запускается автоматически сервером
4.До или после события
5.Не надо пересылать через сеть
дополнительные команды
69. 69
Транзакции
1.Пример – перевод средств со счета на счет
2.Требование ACID
3.Атомарность
4.Согласованность
– Списываемая сумма = зачисляемой сумме
5.Изолированность
6.Надежность
72. Что и зачем?
1.Технология, связывающая БД и ООП
2.По сути: построить по объектам структуру
хранения в БД, чтобы можно было
восстанавливать свойства
3.Хочется не зависеть от «наречия» SQl
74. Необходимые импорты для создания таблиц:
Подготовка
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()
76. Альбом
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)
77. Добавление данных
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()
78. Модификация данных
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()
79. Удаление данных
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()
80. Выборка данных
# 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
89. 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
91. 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
92. 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)
94. 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)
95. 95
Внеклассное чтение
1.Проектирование:
– К. Дж. Дейт: Введение в системы баз данных
– Д. Кренке. Теория и практика построения баз данных.
2.SQL упражнения: http://sql-ex.ru/ +
http://www.sql-tutorial.ru/
3.Mongo: https://education.mongodb.com/