Your SlideShare is downloading. ×
Фёдор Строк - Базы данных - SQL, ORM, NoSQL
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Фёдор Строк - Базы данных - SQL, ORM, NoSQL

685
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
685
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Федор Строк Базы данных: SQL, ORM, NoSQL
  • 2. 3 План 1.Основные определения 2.Коротко о проектировании 3.SQL: основные конструкции 4.ORM 5.NoSQL
  • 3. Определения База данных Система управления базами данных Банк данных
  • 4. Основные определения
  • 5. Основные определения База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы
  • 6. Основные определения База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы Система управления базами данных (СУБД) — совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных
  • 7. Основные определения База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы Система управления базами данных (СУБД) — совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных Банк Данных - совокупность одной или нескольких баз данных и средств управления (манипулирования) данными
  • 8. Простыми словам База данных - это набор информации, которую вы храните. Система управления базами данных (СУБД) — это программа, которая предоставляет доступ внешним приложениям к базе данных, обеспечивает ее работу.
  • 9. История БД
  • 10. Теория баз данных 1.Молодая дисциплина ~30 лет 2.К 2020 году 40 зеттабайт (1021) (424 авианосца дисков Blue-ray)
  • 11. Области вычислительной техники 1.Выполнение численных расчетов 2.Автоматические или автоматизированные информационные системы – Хранение информации – Бизнес-логика – Интерфейс – Появилась позже (медленные устройства хранения)
  • 12. Нулевой этап 1.Шумерские глиняные таблицы
  • 13. Файловые системы 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
  • 14. Файловые системы 1.Избыточность данных 2.Несогласованность данных 3.Зависимость структур данных и прикладных программ 4.Зависимость программ от данных – точно знать структуру записи файла с точностью до бита 5.Отсутствие централизованного управления доступом 6.Многопользовательский режим
  • 15. БД на больших ЭВМ 1.1968 - первая промышленная СУБД система Information Management System фирмы IBM – иерархическая (бд, сегмент, поле) 2.Основные принципы: – Централизованная БД в режиме распределенного доступа (управление доступом) – ОС отвечает за распределение ресурсов – Языки низкого уровня для манипулирования – Много администрирования – Обоснование и формализация реляционной модели (избыточность данных) – Понятие транзакции – Первые языки высокого уровня для реляционной модели (зависимость от данных в программах)
  • 16. Эпоха ПК 1.Монопольный доступ 2.Развитый и удобный интерфейс 3.Поддержка и SQL, и низкоуровневого манипулирования 4.Нет ссылочной и структурной целостности 5.Скромные требования к железу
  • 17. Распределенные БД 1.Поддержка структурной целостности 2.Языковая целостность SQL 3.Ссылочная целостность 4.Поддержка многоплатформенной архитектуры 5.Многопользовательская работа 6.Стандарты в SQL 7.Появление объектно-ориентированных БД
  • 18. Проектирование БД
  • 19. Основные этапы проектирования
  • 20. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области
  • 21. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области 2.Инфологическое моделирование
  • 22. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области 2.Инфологическое моделирование 3.Даталогическое моделирование
  • 23. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области 2.Инфологическое моделирование 3.Даталогическое моделирование 4.Физическое проектирование
  • 24. Системный анализ
  • 25. Системный анализ 1.Выделить объекты и связи между ними
  • 26. Системный анализ 1.Выделить объекты и связи между ними 2.Два подхода: – Предметный подход • Наиболее характерные и существенные объекты • Возможна избыточная сложность – Функциональный подход • От задачи • Легко выделить минимальный набор обязательных объектов
  • 27. Системный анализ 1.Выделить объекты и связи между ними 2.Два подхода: – Предметный подход • Наиболее характерные и существенные объекты • Возможна избыточная сложность – Функциональный подход • От задачи • Легко выделить минимальный набор обязательных объектов 3.На практике – компромиссные варианты
  • 28. Системный анализ 1.Выделить объекты и связи между ними 2.Два подхода: – Предметный подход • Наиболее характерные и существенные объекты • Возможна избыточная сложность – Функциональный подход • От задачи • Легко выделить минимальный набор обязательных объектов 3.На практике – компромиссные варианты 4.На выходе подробное описание: входные/выходные документы, задачи, алгоритмы
  • 29. Инфологическая модель 1.Модель сущность-связь 2.Нотация Чена 3.Нотация Crow’s foot
  • 30. Нотация Чена
  • 31. Crow’s foot
  • 32. Пример 1.БД для школы
  • 33. Пример
  • 34. Даталогическое моделирование 1.Разработка схемы БД 2.Правила целостности 3.Схема БД на основе реляционности
  • 35. Реляционность 1.Данные в бд – набор отношений 2.Отношения отвечают условиям целостности 3.Поддержка операторов манипулирования (реляционная алгебра)
  • 36. Нормальные Формы 1.1NF 2.2NF 3.3NF 4.BCNF 5.4NF 6.5NF 7.DKNF 8.6NF
  • 37. 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
  • 38. 2NF Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо зависит от её потенциального ключа Сотрудник Должность Зарплата Наличие компьютера Гришин Кладовщик 20000 Нет Васильев Программист 40000 Есть Иванов Кладовщик 25000 Нет Сотрудник Должность Зарплата Гришин Кладовщик 20000 Васильев Программист 40000 Иванов Кладовщик 25000 Должность Наличие компьютера Кладовщик Нет Программист Есть
  • 39. 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
  • 40. 42 Денормализация
  • 41. 43 Денормализация 1.Операция соединения – долгая
  • 42. 44 Денормализация 1.Операция соединения – долгая 2.Когда запроса невозможно дальше ускорять – «закэшировать» результат соединения на уровне базы
  • 43. 45 Денормализация 1.Операция соединения – долгая 2.Когда запроса невозможно дальше ускорять – «закэшировать» результат соединения на уровне базы 3.Повышает риск нарушения целостности
  • 44. 46 Денормализация 1.Операция соединения – долгая 2.Когда запроса невозможно дальше ускорять – «закэшировать» результат соединения на уровне базы 3.Повышает риск нарушения целостности 4.Рекомендуется для БД, ориентированных только на чтение
  • 45. 47 Денормализация 1.Операция соединения – долгая 2.Когда запроса невозможно дальше ускорять – «закэшировать» результат соединения на уровне базы 3.Повышает риск нарушения целостности 4.Рекомендуется для БД, ориентированных только на чтение 5.Можно замедлить другие запросы
  • 46. SQL История Основные операторы Трехзначная логика
  • 47. 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 устранение неоднозначностей
  • 48. 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/
  • 49. 51 DDL Язык описания структуры БД 1.CREATE 2.ALTER 3.DROP 4.GRANT ALL ON *.* TO 'someuser'@'somehost';
  • 50. 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;
  • 51. 53 ALTER ALTER TABLE class ADD COLUMN `head_id` int(11) NOT NULL; ALTER TABLE class MODIFY letter char(2) NOT NULL DEFAULT ‘A’;
  • 52. 54 DML Язык управления данными 1.Select 2.Insert 3.Update 4.Delete
  • 53. 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);
  • 54. 56 UPDATE UPDATE class SET head_id = 0; UPDATE class SET letter='A' WHERE id = 3;
  • 55. 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;
  • 56. 58 Join JOIN — оператор языка SQL, который является реализацией операции соединения реляционной алгебры Итоговая схема – сцепление схем Итоговые кортежи – сцепление строк таблиц
  • 57. 59 Join Виды: - Inner - Left - Right - Full outer - Cross Фамилия Группа Иванов 1 Петров 2 Сидоров 1 Васильев 3 Группа Название 1 171 2 241 4 172
  • 58. 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
  • 59. 61 INNER Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171
  • 60. 62 LEFT Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171 Васильев 3 NULL NULL
  • 61. 63 RIGHT Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171 NULL NULL 4 172
  • 62. 64 FULL OUTER Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171 NULL NULL 4 172 Васильев 3 NULL NULL
  • 63. 65 CCL Язык управления курсорами 1.Declare 2.Open 3.Fetch 4.Close
  • 64. 66 DCL 1.Язык работы с правами доступа 2.Grant 3.Revoke 4.GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
  • 65. 67 Хранимые процедуры 1.Операторы уже в БД 2.Оптимизация и компиляция на стороне сервера 3.Поддерживают модульное программирование 4.Можно вызывать «снаружи» 5.Быстрее
  • 66. 68 Триггеры 1.Хранимая процедура особого типа – После insert, delete, update 2.Обеспечение целостности и сложная бизнес логика 3.Запускается автоматически сервером 4.До или после события 5.Не надо пересылать через сеть дополнительные команды
  • 67. 69 Транзакции 1.Пример – перевод средств со счета на счет 2.Требование ACID 3.Атомарность 4.Согласованность – Списываемая сумма = зачисляемой сумме 5.Изолированность 6.Надежность
  • 68. 70 Транзакции: TCL 1.COMMIT 2.ROLLBACK 3.SAVEPOINT 4.START TRANSACTION
  • 69. ORM
  • 70. Что и зачем? 1.Технология, связывающая БД и ООП 2.По сути: построить по объектам структуру хранения в БД, чтобы можно было восстанавливать свойства 3.Хочется не зависеть от «наречия» SQl
  • 71. SQLAlchemy 1.Python, SQL, ORM
  • 72. Необходимые импорты для создания таблиц: Подготовка 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()
  • 73. Музыкант class Artist(Base): __tablename__ = "artists" id = Column(Integer, primary_key=True) name = Column(String) def __init__(self, name): self.name = name
  • 74. Альбом 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)
  • 75. Добавление данных 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()
  • 76. Модификация данных 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()
  • 77. Удаление данных 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()
  • 78. Выборка данных # 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
  • 79. Django ORM 1.Python, SQL, ORM 2.Чуть более ограничен 3.Нетривиально использовать только ORM
  • 80. 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 = ''
  • 81. 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()
  • 82. NOSQL
  • 83. 85 Примеры по типам 1.WideColumn – Hadoop – Cassandra 2.Document – MongoDB – CouchDB 3.Key Value/Tuple – Redis – Elliptics – memcached 4.Graph Databases – Neo4j 5.Etc.
  • 84. 86 MongoDB 1.Схема данных заранее может быть неизвестна 2.Эффективно использует доступную память 3.Простой orm для python 4.Используем 
  • 85. 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
  • 86. 88 MapReduce 1.Модель распределенных вычислений 2.Данные шардируются и реплицируются 3.Позволяет обрабатывать Большие данные 4.Данные неоднородные
  • 87. 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
  • 88. 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
  • 89. 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
  • 90. 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)
  • 91. 93 MapReduce: reduce 1.Найти общих в двух списках 2.Reduce((A D) -> (A B C E) (B C D)) => (B C)
  • 92. 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)
  • 93. 95 Внеклассное чтение 1.Проектирование: – К. Дж. Дейт: Введение в системы баз данных – Д. Кренке. Теория и практика построения баз данных. 2.SQL упражнения: http://sql-ex.ru/ + http://www.sql-tutorial.ru/ 3.Mongo: https://education.mongodb.com/
  • 94. Федор Строк 8-915-103-79-28 fdrstrok@yandex-team.ru Вопросы?