web весна 2012 лекция 5
TRANSCRIPT
![Page 2: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/2.jpg)
Как можно хранить данные ?Какие возникнут проблемы ?
![Page 3: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/3.jpg)
Проблемы и задачи
1) Структура хранения2) Описание схемы данных3) Примитивные операции4) Эффективный поиск по данным5) Управление памятью6) Совместный доступ к данным7) Изоляция и блокировки8) Надежные (атомарные) операции
![Page 4: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/4.jpg)
Реляционная алгебраАлгебра = множество + операции над нимОсновные понятия:– Отношение, relation, таблица– Кортеж, tuple, строка, запись, элемент– Аттрибут, столбец, поле– Запрос = выражение рел. алгебры
Реляционная алгебра работает с множеством отношений.
![Page 5: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/5.jpg)
Кортежи не упорядочены, аттрибуты не упорядочены, данные в столбце однотипны.
![Page 6: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/6.jpg)
Операции реляционной алгебры
1) Отбор: удаление части кортежей
2) Проекция: удаление части аттрибутов
3) Декартово произведение: n*m
4) Объединение: при одинаковых аттрибутах
5) Переименование аттрибутов
6) Соединение: произведение, но с дополнительными условиями.
![Page 7: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/7.jpg)
Hero_id Ability
1 Memory
2 Stop Bullets
2 Bend spoons
Id Name
1 Johny
2 Neo
3 Rick Dekkard
Id Name Hero_id Ability
1 Johny 1 Memory
2 Neo 2 Stop Bullets
2 Neo 2 Bend spoons
![Page 8: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/8.jpg)
SQL – язык для работы с СУБД
1) DDL – Data Defenition Language.
Определение структуры отношений
2) DML – Data Manipulation Language.
Изменение хранимых данных.
3) DQL – Data Query Language (select)
Реализация реляционной алгебры.
Вычисления новых отношений. Запросы.
![Page 9: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/9.jpg)
SELECTТаблица - users(id, name)
SELECT id, name, length(name) AS len
FROM users
WHERE email LIKE '%@mail.ru' AND age > 10
ORDER BY name, 1 DESC
LIMIT 10 OFFSET 15
![Page 10: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/10.jpg)
SELECT - агрегацияSELECT name, count(id) cnt
FROM users
GROUP BY name
ORDER BY cnt
Аггрегатные функции: COUNT, SUM, AVG, GROUP_CONCAT
Поле – либо в аггрегатной функции, либо в GROUP BY
![Page 11: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/11.jpg)
Select - соединенияheroes(id, name) abilities(hero_id, ability)
SELECT name, ability
FROM heroes h
INNER JOIN abilities a ON h.id = a.hero_id
SELECT name, ability
FROM heroes h, abilities a
WHERE h.id = a.hero_id
![Page 12: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/12.jpg)
Разновидности join
1) INNER – соединение по условию
2) LEFT OUTER ( A LEFT JOIN B )
- А есть всегда
3) RIGH OUTER ( A RIGHT JOIN B )
- B есть всегда
4) FULL OUTER – есть все кортежи и из A и из B, но часть из них соединена
![Page 13: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/13.jpg)
Id Name
1 Johny
2 Neo
3 Rick Dekkard
Hero_id Abitilty
1 Memory
2 Stop bullets
7 Dance
Id Name Hero_id Ability
1 Johny 1 Memory
2 Neo 2 Stop bullets
3 Rick Dekkard
NULL NULL
Id Name Hero_id Ability
1 Johny 1 Memory
2 Neo 2 Stop bullets
NULL NULL 7 Dance
![Page 14: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/14.jpg)
Вложенные запросыТаблица players (name, team, age)
SELECT name, team, age
FROM players u
INNER JOIN (
SELECT team, max(age) max_age
FROM players
GROUP BY team
) a
ON u.team = a.team AND u.age = a.max_age
![Page 15: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/15.jpg)
SQL – DML запросыINSERT INTO users (name, age) VALUES ('petr', 10);
UPDATE users SET age = 10 WHERE name = 'petr';
UPDATE users SET age = age + 1;
DELETE FROM users WHERE name = 'masha';
DELETE FROM users WHERE age > 150;
REPLACE INTO users (name, age) VALUES ('petr', 10);
INSERT INTO users (name, age) VALUES ('petr', 10) ON DUPLICATE KEY UPDATE name = 'petr', age = 10;
![Page 16: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/16.jpg)
Проектирование базы данныхПроблемы: избыточность, противоречивостьname passport book_id title author
Petr 1122334455
1 Анна Каренина
Лев Толстой
Petr 1122334455
789 Война и Мир Лев Толстой
NULL NULL 2 Азбука O'Reily
id name passport
1 Petr 1122334455
2 Ivan 1234567890
id title
1 Анна Каренина
2 Азбука
789 Война и Мир
user_id book_id
1 1
1 789
![Page 17: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/17.jpg)
Как формализовать ?Ключ – несократимый набор аттрибутов,
обеспечивающий уникальность кортежа.
Нормальные формы – требования к структуре.
1 н.ф.) атомарные значения аттрибутов
2 н.ф.) каждый неключевой аттрибут функционально зависит от ключа
3 н.ф.) каждая такая зависимость нетранзитивна
4, 5, 6 и т.д.)
![Page 18: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/18.jpg)
Best Practice
1) Здравый смысл – разделять сущности
2) Выделять синтетические PK
3) Связи 1:N, N:1 – внешний ключ
4) Связи N:M – промежуточная таблица
5) Аттрибут с фикс. числом значений – внешняя таблица (либо enum)
![Page 19: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/19.jpg)
Целосность. Внешние ключи.Внешний (foreign) ключ – множество
аттрибутов отношения, значения которых указывают на кортеж другого отношения.
1) В целевой таблицы должен быть ключ
2) При добавлении (изменении) кортежа в таблицу СУБД проверит, что есть связанной таблице есть кортеж, на который ссылаются
3) При удаление это кортежа будут удалены (обнулены) все ссылки на него
![Page 20: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/20.jpg)
DDL – определение схемыCREATE TABLE users (
idINTEGER UNSIGNED NOT NULL,
email VARCHAR(64) NOT NULL,
name VARCHAR(255) NOT NULL,
birthdate DATE,
registred DATETIME DEFAULT NOW(),
PRIMARY KEY (id),
UNIQUE KEY (email),
KEY birthdate_idx (birthdate)
);
![Page 21: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/21.jpg)
CREATE TABLE users (
idSERIAL,
name VARCHAR(255) NOT NULL,
);
CREATE TABLE cars (
id SERIAL,
number VARCHAR(10) NOT NULL,
owner_id BIGINT NOT NULL,
FOREIGN KEY (owner_id) REFERENCES users (id)
ON DELETE CASCADE
);
![Page 22: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/22.jpg)
DDL – другие команды
DROP TABLE useless;
ALTER TABLE users ADD COLUMN language enum('ru', 'en') NOT NULL DEFAULT 'ru';
ALTER TABLE users DROP COLUMN langauge;
ALTER TABLE users ADD INDEX ('name');
CREATE DATABASE test;
….
![Page 23: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/23.jpg)
Индексы1) Уникальные (UNIQUE INDEX) = Ключи
2) Не уникальные
1) B-tree
2) HashTable
3) Пространственные (гео индексы)
4) Full-text
В MySQL KEY и INDEX - синонимы
![Page 24: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/24.jpg)
План выполнения запросаtopics( id, title, txt, created)
comments ( id, txt, created, topic_id)
10 последних комментариев вместе с их темами
SELECT с.id, с.txt, с.created, t.id, t.title, t.txt
FROM topics t, comments c
WHERE t.id = c.topic_id
ORDER BY c.created DESC
LIMIT 10;
EXPLAIN – показать план выполнения запроса
![Page 25: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/25.jpg)
1) Создавать индексы для полей по которым происходит JOIN
2) Создавать индексы для полей по которым идет сортировка (ORDER)
3) Проверять план выполнения запроса
4) Использование подсказок (hints):
Принудительное использование индекса
Порядок выполнения JOIN
5) Селективность и кардинальность
Методы оптимизации запросов
![Page 26: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/26.jpg)
ACID1) Atomicity – атомарность операций
2) Consistency – согласованность
3) Isolation – изоляция клиентов
4) Durability – гарантия сохранения после успешного завершения операции
Блокировки1) Row / Page / Table level
2) Read / Write lock
![Page 27: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/27.jpg)
ТранзакцииТранзакция – группа изменений данных,
которые либо происходят все вместе либо не происходят вообще. Rollback. Commit.
Уровни изоляции 1) совместный доступ → Read uncommitted
2) “грязное чтение” → Read committed
3) неповторяющ. запросы → Repeatable read
4) фантомное чтение → Serializable
![Page 28: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/28.jpg)
Обзор СУБД
![Page 29: Web весна 2012 лекция 5](https://reader034.vdocuments.mx/reader034/viewer/2022050922/559a06731a28abd9208b4573/html5/thumbnails/29.jpg)
Домашнее задание
1) http://sql-ex.ru
2) Спроектировать базу данных для хранения журнала посещения занятий.