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

Post on 06-Jul-2015

104 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

СУБД

Смаль Дмитрийsmal@corp.mail.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1) DDL – Data Defenition Language.

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

2) DML – Data Manipulation Language.

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

3) DQL – Data Query Language (select)

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

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

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

SELECT - агрегацияSELECT name, count(id) cnt

FROM users

GROUP BY name

ORDER BY cnt

Аггрегатные функции: COUNT, SUM, AVG, GROUP_CONCAT

Поле – либо в аггрегатной функции, либо в GROUP BY

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

Разновидности join

1) INNER – соединение по условию

2) LEFT OUTER ( A LEFT JOIN B )

- А есть всегда

3) RIGH OUTER ( A RIGHT JOIN B )

- B есть всегда

4) FULL OUTER – есть все кортежи и из A и из B, но часть из них соединена

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

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

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;

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

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

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

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

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

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

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

4, 5, 6 и т.д.)

Best Practice

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

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

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

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

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

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

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

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

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

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

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)

);

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

);

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;

….

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

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

1) B-tree

2) HashTable

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

4) Full-text

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2) Read / Write lock

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

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

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

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

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

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

Обзор СУБД

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

1) http://sql-ex.ru

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

top related