web весна 2012 лекция 5

29
СУБД Смаль Дмитрий [email protected]

Upload: technopark

Post on 06-Jul-2015

101 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Web весна 2012 лекция 5

СУБД

Смаль Дмитрий[email protected]

Page 2: Web весна 2012 лекция 5

Как можно хранить данные ?Какие возникнут проблемы ?

Page 3: Web весна 2012 лекция 5

Проблемы и задачи

1) Структура хранения2) Описание схемы данных3) Примитивные операции4) Эффективный поиск по данным5) Управление памятью6) Совместный доступ к данным7) Изоляция и блокировки8) Надежные (атомарные) операции

Page 4: Web весна 2012 лекция 5

Реляционная алгебраАлгебра = множество + операции над нимОсновные понятия:– Отношение, relation, таблица– Кортеж, tuple, строка, запись, элемент– Аттрибут, столбец, поле– Запрос = выражение рел. алгебры

Реляционная алгебра работает с множеством отношений.

Page 5: Web весна 2012 лекция 5

Кортежи не упорядочены, аттрибуты не упорядочены, данные в столбце однотипны.

Page 6: Web весна 2012 лекция 5

Операции реляционной алгебры

1) Отбор: удаление части кортежей

2) Проекция: удаление части аттрибутов

3) Декартово произведение: n*m

4) Объединение: при одинаковых аттрибутах

5) Переименование аттрибутов

6) Соединение: произведение, но с дополнительными условиями.

Page 7: Web весна 2012 лекция 5

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

SQL – язык для работы с СУБД

1) DDL – Data Defenition Language.

Определение структуры отношений

2) DML – Data Manipulation Language.

Изменение хранимых данных.

3) DQL – Data Query Language (select)

Реализация реляционной алгебры.

Вычисления новых отношений. Запросы.

Page 9: Web весна 2012 лекция 5

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

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

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

Разновидности 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

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

Вложенные запросыТаблица 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

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

Проектирование базы данныхПроблемы: избыточность, противоречивость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

Как формализовать ?Ключ – несократимый набор аттрибутов,

обеспечивающий уникальность кортежа.

Нормальные формы – требования к структуре.

1 н.ф.) атомарные значения аттрибутов

2 н.ф.) каждый неключевой аттрибут функционально зависит от ключа

3 н.ф.) каждая такая зависимость нетранзитивна

4, 5, 6 и т.д.)

Page 18: Web весна 2012 лекция 5

Best Practice

1) Здравый смысл – разделять сущности

2) Выделять синтетические PK

3) Связи 1:N, N:1 – внешний ключ

4) Связи N:M – промежуточная таблица

5) Аттрибут с фикс. числом значений – внешняя таблица (либо enum)

Page 19: Web весна 2012 лекция 5

Целосность. Внешние ключи.Внешний (foreign) ключ – множество

аттрибутов отношения, значения которых указывают на кортеж другого отношения.

1) В целевой таблицы должен быть ключ

2) При добавлении (изменении) кортежа в таблицу СУБД проверит, что есть связанной таблице есть кортеж, на который ссылаются

3) При удаление это кортежа будут удалены (обнулены) все ссылки на него

Page 20: Web весна 2012 лекция 5

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

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

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

Индексы1) Уникальные (UNIQUE INDEX) = Ключи

2) Не уникальные

1) B-tree

2) HashTable

3) Пространственные (гео индексы)

4) Full-text

В MySQL KEY и INDEX - синонимы

Page 24: Web весна 2012 лекция 5

План выполнения запроса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

1) Создавать индексы для полей по которым происходит JOIN

2) Создавать индексы для полей по которым идет сортировка (ORDER)

3) Проверять план выполнения запроса

4) Использование подсказок (hints):

Принудительное использование индекса

Порядок выполнения JOIN

5) Селективность и кардинальность

Методы оптимизации запросов

Page 26: Web весна 2012 лекция 5

ACID1) Atomicity – атомарность операций

2) Consistency – согласованность

3) Isolation – изоляция клиентов

4) Durability – гарантия сохранения после успешного завершения операции

Блокировки1) Row / Page / Table level

2) Read / Write lock

Page 27: Web весна 2012 лекция 5

ТранзакцииТранзакция – группа изменений данных,

которые либо происходят все вместе либо не происходят вообще. Rollback. Commit.

Уровни изоляции 1) совместный доступ → Read uncommitted

2) “грязное чтение” → Read committed

3) неповторяющ. запросы → Repeatable read

4) фантомное чтение → Serializable

Page 28: Web весна 2012 лекция 5

Обзор СУБД

Page 29: Web весна 2012 лекция 5

Домашнее задание

1) http://sql-ex.ru

2) Спроектировать базу данных для хранения журнала посещения занятий.