SlideShare uma empresa Scribd logo
1 de 96
Baixar para ler offline
Федор Строк
Базы данных:
SQL, ORM,
NoSQL
3
План
1.Основные определения
2.Коротко о проектировании
3.SQL: основные конструкции
4.ORM
5.NoSQL
Определения
База данных
Система управления базами данных
Банк данных
Основные определения
Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Система управления базами данных (СУБД) — совокупность
программных и лингвистических средств общего или специального
назначения, обеспечивающих управление созданием и
использованием баз данных
Основные определения
База данных - это набор структурированной информации,
предназначенный для совместного использования несколькими
пользователями одновременно. Отдельные элементы данных в базе
данных связаны между собой логическими связями, взаимозависимы
Система управления базами данных (СУБД) — совокупность
программных и лингвистических средств общего или специального
назначения, обеспечивающих управление созданием и
использованием баз данных
Банк Данных - совокупность одной или нескольких баз данных и средств
управления (манипулирования) данными
Простыми словам
База данных - это набор информации, которую вы храните.
Система управления базами данных (СУБД) — это программа, которая
предоставляет доступ внешним приложениям к базе данных,
обеспечивает ее работу.
История БД
Теория баз данных
1.Молодая дисциплина ~30 лет
2.К 2020 году 40 зеттабайт (1021) (424
авианосца дисков Blue-ray)
Области вычислительной техники
1.Выполнение численных расчетов
2.Автоматические или автоматизированные
информационные системы
– Хранение информации
– Бизнес-логика
– Интерфейс
– Появилась позже (медленные устройства хранения)
Нулевой этап
1.Шумерские глиняные
таблицы
Файловые системы
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
Файловые системы
1.Избыточность данных
2.Несогласованность данных
3.Зависимость структур данных и
прикладных программ
4.Зависимость программ от данных
– точно знать структуру записи файла с точностью до бита
5.Отсутствие централизованного управления
доступом
6.Многопользовательский режим
БД на больших ЭВМ
1.1968 - первая промышленная СУБД
система Information Management System
фирмы IBM – иерархическая (бд, сегмент,
поле)
2.Основные принципы:
– Централизованная БД в режиме распределенного доступа
(управление доступом)
– ОС отвечает за распределение ресурсов
– Языки низкого уровня для манипулирования
– Много администрирования
– Обоснование и формализация реляционной модели (избыточность
данных)
– Понятие транзакции
– Первые языки высокого уровня для реляционной модели
(зависимость от данных в программах)
Эпоха ПК
1.Монопольный доступ
2.Развитый и удобный интерфейс
3.Поддержка и SQL, и низкоуровневого
манипулирования
4.Нет ссылочной и структурной целостности
5.Скромные требования к железу
Распределенные БД
1.Поддержка структурной целостности
2.Языковая целостность SQL
3.Ссылочная целостность
4.Поддержка многоплатформенной
архитектуры
5.Многопользовательская работа
6.Стандарты в SQL
7.Появление объектно-ориентированных БД
Проектирование БД
Основные этапы проектирования
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
3.Даталогическое моделирование
Основные этапы проектирования
1.Системный анализ и словесное описание
предметной области
2.Инфологическое моделирование
3.Даталогическое моделирование
4.Физическое проектирование
Системный анализ
Системный анализ
1.Выделить объекты и связи между ними
Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода:
– Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода:
– Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
3.На практике – компромиссные варианты
Системный анализ
1.Выделить объекты и связи между ними
2.Два подхода:
– Предметный подход
• Наиболее характерные и существенные объекты
• Возможна избыточная сложность
– Функциональный подход
• От задачи
• Легко выделить минимальный набор обязательных объектов
3.На практике – компромиссные варианты
4.На выходе подробное описание:
входные/выходные документы, задачи,
алгоритмы
Инфологическая модель
1.Модель сущность-связь
2.Нотация Чена
3.Нотация Crow’s foot
Нотация Чена
Crow’s foot
Пример
1.БД для школы
Пример
Даталогическое моделирование
1.Разработка схемы БД
2.Правила целостности
3.Схема БД на основе реляционности
Реляционность
1.Данные в бд – набор отношений
2.Отношения отвечают условиям
целостности
3.Поддержка операторов манипулирования
(реляционная алгебра)
Нормальные Формы
1.1NF
2.2NF
3.3NF
4.BCNF
5.4NF
6.5NF
7.DKNF
8.6NF
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
2NF
Переменная отношения находится во второй нормальной форме тогда и
только тогда, когда она находится в первой нормальной форме и каждый
неключевой атрибут неприводимо зависит от её потенциального ключа
Сотрудник Должность Зарплата Наличие компьютера
Гришин Кладовщик 20000 Нет
Васильев Программист 40000 Есть
Иванов Кладовщик 25000 Нет
Сотрудник Должность Зарплата
Гришин Кладовщик 20000
Васильев Программист 40000
Иванов Кладовщик 25000
Должность Наличие компьютера
Кладовщик Нет
Программист Есть
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
42
Денормализация
43
Денормализация
1.Операция соединения – долгая
44
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
45
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
46
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
4.Рекомендуется для БД, ориентированных
только на чтение
47
Денормализация
1.Операция соединения – долгая
2.Когда запроса невозможно дальше
ускорять – «закэшировать» результат
соединения на уровне базы
3.Повышает риск нарушения целостности
4.Рекомендуется для БД, ориентированных
только на чтение
5.Можно замедлить другие запросы
SQL
История
Основные операторы
Трехзначная логика
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
MySQL vs MSSQL
• Order by
– Mysql: есть недокументированная особенность с Null при минусе
перед именем столбца
• Boolean
– MySQL: tinyint(1)
– MSSQL: Bit
• Char
– MySQL: обрезает пробелы в конце
– MSSQL: обрезает их перед вызовами некоторых функций
• Подробнее, и не только про
MSSQL&MySQL:
http://troels.arvin.dk/db/rdbms/
51
DDL
Язык описания структуры БД
1.CREATE
2.ALTER
3.DROP
4.GRANT ALL ON *.* TO
'someuser'@'somehost';
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;
53
ALTER
ALTER TABLE class ADD COLUMN
`head_id` int(11) NOT NULL;
ALTER TABLE class MODIFY letter
char(2) NOT NULL DEFAULT ‘A’;
54
DML
Язык управления данными
1.Select
2.Insert
3.Update
4.Delete
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);
56
UPDATE
UPDATE class SET head_id = 0;
UPDATE class SET letter='A' WHERE id
= 3;
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
Join
JOIN — оператор языка SQL, который
является реализацией операции соединения
реляционной алгебры
Итоговая схема – сцепление схем
Итоговые кортежи – сцепление строк таблиц
59
Join
Виды:
- Inner
- Left
- Right
- Full outer
- Cross
Фамилия Группа
Иванов 1
Петров 2
Сидоров 1
Васильев 3
Группа Название
1 171
2 241
4 172
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
61
INNER
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
62
LEFT
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
Васильев 3 NULL NULL
63
RIGHT
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
NULL NULL 4 172
64
FULL OUTER
Фамилия Группа Группа Название
Иванов 1 1 171
Петров 2 2 241
Сидоров 1 1 171
NULL NULL 4 172
Васильев 3 NULL NULL
65
CCL
Язык управления курсорами
1.Declare
2.Open
3.Fetch
4.Close
66
DCL
1.Язык работы с правами доступа
2.Grant
3.Revoke
4.GRANT SELECT, INSERT ON mydb.* TO
'someuser'@'somehost';
67
Хранимые процедуры
1.Операторы уже в БД
2.Оптимизация и компиляция на стороне
сервера
3.Поддерживают модульное
программирование
4.Можно вызывать «снаружи»
5.Быстрее
68
Триггеры
1.Хранимая процедура особого типа
– После insert, delete, update
2.Обеспечение целостности и сложная
бизнес логика
3.Запускается автоматически сервером
4.До или после события
5.Не надо пересылать через сеть
дополнительные команды
69
Транзакции
1.Пример – перевод средств со счета на счет
2.Требование ACID
3.Атомарность
4.Согласованность
– Списываемая сумма = зачисляемой сумме
5.Изолированность
6.Надежность
70
Транзакции: TCL
1.COMMIT
2.ROLLBACK
3.SAVEPOINT
4.START TRANSACTION
ORM
Что и зачем?
1.Технология, связывающая БД и ООП
2.По сути: построить по объектам структуру
хранения в БД, чтобы можно было
восстанавливать свойства
3.Хочется не зависеть от «наречия» SQl
SQLAlchemy
1.Python, SQL, ORM
Необходимые импорты для создания таблиц:
Подготовка
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()
Музыкант
class Artist(Base):
__tablename__ = "artists"
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
Альбом
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)
Добавление данных
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()
Модификация данных
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()
Удаление данных
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()
Выборка данных
# 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
Django ORM
1.Python, SQL, ORM
2.Чуть более ограничен
3.Нетривиально использовать только ORM
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 = ''
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()
NOSQL
85
Примеры по типам
1.WideColumn
– Hadoop
– Cassandra
2.Document
– MongoDB
– CouchDB
3.Key Value/Tuple
– Redis
– Elliptics
– memcached
4.Graph Databases
– Neo4j
5.Etc.
86
MongoDB
1.Схема данных заранее может быть
неизвестна
2.Эффективно использует доступную память
3.Простой orm для python
4.Используем 
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
88
MapReduce
1.Модель распределенных вычислений
2.Данные шардируются и реплицируются
3.Позволяет обрабатывать Большие данные
4.Данные неоднородные
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
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
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
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)
93
MapReduce: reduce
1.Найти общих в двух списках
2.Reduce((A D) -> (A B C E) (B C D)) => (B C)
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
Внеклассное чтение
1.Проектирование:
– К. Дж. Дейт: Введение в системы баз данных
– Д. Кренке. Теория и практика построения баз данных.
2.SQL упражнения: http://sql-ex.ru/ +
http://www.sql-tutorial.ru/
3.Mongo: https://education.mongodb.com/
Федор Строк
8-915-103-79-28
fdrstrok@yandex-team.ru
Вопросы?

Mais conteúdo relacionado

Destaque

Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 
использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.Asya Dudnik
 
Data Access Layer как страховка на случай миграции СУБД
Data Access Layer как страховка на случай миграции СУБДData Access Layer как страховка на случай миграции СУБД
Data Access Layer как страховка на случай миграции СУБДCUSTIS
 
Продуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADFПродуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADFDmitry Nefedkin
 
Android - 13 - Database
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - DatabaseNoveo
 
Работа с платежными системами в Django (Paypal, WebMoney)
Работа с платежными системами в Django (Paypal, WebMoney)Работа с платежными системами в Django (Paypal, WebMoney)
Работа с платежными системами в Django (Paypal, WebMoney)proft
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЯковенко Кирилл
 
Лекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЛекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЯковенко Кирилл
 
Лекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЛекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЯковенко Кирилл
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
Лекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЛекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЯковенко Кирилл
 
Управление Данными. Лекция 5
Управление Данными. Лекция 5Управление Данными. Лекция 5
Управление Данными. Лекция 5Dmitriy Krukov
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
Devclub 01/2017 - (Не)адекватное Java-интервью
Devclub 01/2017 - (Не)адекватное Java-интервьюDevclub 01/2017 - (Не)адекватное Java-интервью
Devclub 01/2017 - (Не)адекватное Java-интервьюAnton Arhipov
 

Destaque (17)

Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.
 
Data Access Layer как страховка на случай миграции СУБД
Data Access Layer как страховка на случай миграции СУБДData Access Layer как страховка на случай миграции СУБД
Data Access Layer как страховка на случай миграции СУБД
 
Продуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADFПродуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADF
 
Android - 13 - Database
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - Database
 
Работа с платежными системами в Django (Paypal, WebMoney)
Работа с платежными системами в Django (Paypal, WebMoney)Работа с платежными системами в Django (Paypal, WebMoney)
Работа с платежными системами в Django (Paypal, WebMoney)
 
Лекция #7. Django ORM
Лекция #7. Django ORMЛекция #7. Django ORM
Лекция #7. Django ORM
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
Лекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЛекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилей
 
Лекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЛекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страниц
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
Лекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЛекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологий
 
ORM_Presentation (1)
ORM_Presentation (1)ORM_Presentation (1)
ORM_Presentation (1)
 
Управление Данными. Лекция 5
Управление Данными. Лекция 5Управление Данными. Лекция 5
Управление Данными. Лекция 5
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Devclub 01/2017 - (Не)адекватное Java-интервью
Devclub 01/2017 - (Не)адекватное Java-интервьюDevclub 01/2017 - (Не)адекватное Java-интервью
Devclub 01/2017 - (Не)адекватное Java-интервью
 

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

Базы данных лекция №4
Базы данных лекция №4Базы данных лекция №4
Базы данных лекция №4Vitaliy Pak
 
проектная работа на тему субд
проектная работа на тему субдпроектная работа на тему субд
проектная работа на тему субдMarsel Galikhanov
 
006
006006
006JIuc
 
Управление Данными. Лекция 1
Управление Данными. Лекция 1Управление Данными. Лекция 1
Управление Данными. Лекция 1Dmitriy Krukov
 
Базы данных лекция №1
Базы данных лекция №1Базы данных лекция №1
Базы данных лекция №1Vitaliy Pak
 
история развития бд1
история развития бд1история развития бд1
история развития бд1Sai_17
 
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Provectus
 
тема 4 2
тема 4 2тема 4 2
тема 4 2asheg
 
Базы данных лекция №11
Базы данных лекция №11Базы данных лекция №11
Базы данных лекция №11Vitaliy Pak
 
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данныхHappyDev
 
001
001001
001JIuc
 
Система Хранения Оригиналов Документов
Система Хранения Оригиналов ДокументовСистема Хранения Оригиналов Документов
Система Хранения Оригиналов ДокументовGregory Vlasov
 
презентация семинар по бд
презентация семинар по бдпрезентация семинар по бд
презентация семинар по бдanna_pal
 
IMS DB vs DB2 for z/OS
IMS DB vs DB2 for z/OSIMS DB vs DB2 for z/OS
IMS DB vs DB2 for z/OSGregory Vlasov
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBIurii Ogiienko
 

Semelhante a Фёдор Строк - Базы данных - SQL, ORM, NoSQL (20)

10 субд
10 субд10 субд
10 субд
 
Базы данных лекция №4
Базы данных лекция №4Базы данных лекция №4
Базы данных лекция №4
 
проектная работа на тему субд
проектная работа на тему субдпроектная работа на тему субд
проектная работа на тему субд
 
006
006006
006
 
Управление Данными. Лекция 1
Управление Данными. Лекция 1Управление Данными. Лекция 1
Управление Данными. Лекция 1
 
лекция 2
лекция 2лекция 2
лекция 2
 
Базы данных лекция №1
Базы данных лекция №1Базы данных лекция №1
Базы данных лекция №1
 
история развития бд1
история развития бд1история развития бд1
история развития бд1
 
9946
99469946
9946
 
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
 
тема 4 2
тема 4 2тема 4 2
тема 4 2
 
Базы данных лекция №11
Базы данных лекция №11Базы данных лекция №11
Базы данных лекция №11
 
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
 
001
001001
001
 
Система Хранения Оригиналов Документов
Система Хранения Оригиналов ДокументовСистема Хранения Оригиналов Документов
Система Хранения Оригиналов Документов
 
базы данных
базы данныхбазы данных
базы данных
 
презентация семинар по бд
презентация семинар по бдпрезентация семинар по бд
презентация семинар по бд
 
IMS DB vs DB2 for z/OS
IMS DB vs DB2 for z/OSIMS DB vs DB2 for z/OS
IMS DB vs DB2 for z/OS
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
лекция 3
лекция 3лекция 3
лекция 3
 

Mais de Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Mais de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

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

  • 1.
  • 3. 3 План 1.Основные определения 2.Коротко о проектировании 3.SQL: основные конструкции 4.ORM 5.NoSQL
  • 6. Основные определения База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы
  • 7. Основные определения База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы Система управления базами данных (СУБД) — совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных
  • 8. Основные определения База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы Система управления базами данных (СУБД) — совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных Банк Данных - совокупность одной или нескольких баз данных и средств управления (манипулирования) данными
  • 9. Простыми словам База данных - это набор информации, которую вы храните. Система управления базами данных (СУБД) — это программа, которая предоставляет доступ внешним приложениям к базе данных, обеспечивает ее работу.
  • 11. Теория баз данных 1.Молодая дисциплина ~30 лет 2.К 2020 году 40 зеттабайт (1021) (424 авианосца дисков Blue-ray)
  • 12. Области вычислительной техники 1.Выполнение численных расчетов 2.Автоматические или автоматизированные информационные системы – Хранение информации – Бизнес-логика – Интерфейс – Появилась позже (медленные устройства хранения)
  • 14.
  • 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.Появление объектно-ориентированных БД
  • 22. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области
  • 23. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области 2.Инфологическое моделирование
  • 24. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области 2.Инфологическое моделирование 3.Даталогическое моделирование
  • 25. Основные этапы проектирования 1.Системный анализ и словесное описание предметной области 2.Инфологическое моделирование 3.Даталогическое моделирование 4.Физическое проектирование
  • 28. Системный анализ 1.Выделить объекты и связи между ними 2.Два подхода: – Предметный подход • Наиболее характерные и существенные объекты • Возможна избыточная сложность – Функциональный подход • От задачи • Легко выделить минимальный набор обязательных объектов
  • 29. Системный анализ 1.Выделить объекты и связи между ними 2.Два подхода: – Предметный подход • Наиболее характерные и существенные объекты • Возможна избыточная сложность – Функциональный подход • От задачи • Легко выделить минимальный набор обязательных объектов 3.На практике – компромиссные варианты
  • 30. Системный анализ 1.Выделить объекты и связи между ними 2.Два подхода: – Предметный подход • Наиболее характерные и существенные объекты • Возможна избыточная сложность – Функциональный подход • От задачи • Легко выделить минимальный набор обязательных объектов 3.На практике – компромиссные варианты 4.На выходе подробное описание: входные/выходные документы, задачи, алгоритмы
  • 36. Даталогическое моделирование 1.Разработка схемы БД 2.Правила целостности 3.Схема БД на основе реляционности
  • 37. Реляционность 1.Данные в бд – набор отношений 2.Отношения отвечают условиям целостности 3.Поддержка операторов манипулирования (реляционная алгебра)
  • 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
  • 44. 44 Денормализация 1.Операция соединения – долгая 2.Когда запроса невозможно дальше ускорять – «закэшировать» результат соединения на уровне базы
  • 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/
  • 51. 51 DDL Язык описания структуры БД 1.CREATE 2.ALTER 3.DROP 4.GRANT ALL ON *.* TO 'someuser'@'somehost';
  • 52. 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;
  • 53. 53 ALTER ALTER TABLE class ADD COLUMN `head_id` int(11) NOT NULL; ALTER TABLE class MODIFY letter char(2) NOT NULL DEFAULT ‘A’;
  • 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);
  • 56. 56 UPDATE UPDATE class SET head_id = 0; UPDATE class SET letter='A' WHERE id = 3;
  • 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
  • 61. 61 INNER Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171
  • 62. 62 LEFT Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171 Васильев 3 NULL NULL
  • 63. 63 RIGHT Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171 NULL NULL 4 172
  • 64. 64 FULL OUTER Фамилия Группа Группа Название Иванов 1 1 171 Петров 2 2 241 Сидоров 1 1 171 NULL NULL 4 172 Васильев 3 NULL NULL
  • 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.Надежность
  • 71. ORM
  • 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()
  • 75. Музыкант class Artist(Base): __tablename__ = "artists" id = Column(Integer, primary_key=True) name = Column(String) def __init__(self, name): self.name = name
  • 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
  • 81. Django ORM 1.Python, SQL, ORM 2.Чуть более ограничен 3.Нетривиально использовать только ORM
  • 82. 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 = ''
  • 83. 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()
  • 84. NOSQL
  • 85. 85 Примеры по типам 1.WideColumn – Hadoop – Cassandra 2.Document – MongoDB – CouchDB 3.Key Value/Tuple – Redis – Elliptics – memcached 4.Graph Databases – Neo4j 5.Etc.
  • 86. 86 MongoDB 1.Схема данных заранее может быть неизвестна 2.Эффективно использует доступную память 3.Простой orm для python 4.Используем 
  • 87. 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
  • 88. 88 MapReduce 1.Модель распределенных вычислений 2.Данные шардируются и реплицируются 3.Позволяет обрабатывать Большие данные 4.Данные неоднородные
  • 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
  • 90. 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
  • 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)
  • 93. 93 MapReduce: reduce 1.Найти общих в двух списках 2.Reduce((A D) -> (A B C E) (B C D)) => (B C)
  • 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/