
- •Шехтман в. Е.
- •1. Базы данных и модели данных
- •1.1. Введение.
- •1.2. Файлы операционной системы
- •1.3. Пример базы данных.
- •1.4. Иерархическая модель данных
- •1.5. Сетевая модель данных
- •1.6. Инвертированные списки.
- •1.7. Реляционная модель данных
- •2. Введение в реляционную модель данных.
- •3. Реляционная алгебра
- •3.1. Теоретико-множественные операции.
- •3.2. Специальные операции ra
- •4. Нормализация данных
- •4.1. Полная декомпозиция.
- •Магазин товар ндс
- •Товар ндс
- •Магазин ндс
- •Товар ндс
- •Магазин товар ндс
- •4.2. Проблема дублирования данных.
- •1 Глобус 33-33-33
- •2 Глобус 33-33-33
- •4 Океан 77-77-77
- •4.3. Висячие записи.
- •Поставщик Тел
- •4.4. Проблемы, возникающие из-за неудачной структуры данных.
- •4.5. Пятая нормальная форма (5нф).
- •4.6. Функциональная зависимость.
- •4.7. Связь между фз и полной декомпозицией отношения.
- •4.8. Первая нормальная форма (1нф).
- •4.9. Вторая нормальная форма (2нф).
- •4.10. Третья нормальная форма (3нф).
- •4.11. Нормальная форма Бойса-Кодда (нфбк).
- •4.12. Многозначная зависимость.
- •4.13. Четвертая нормальная форма (4нф).
- •4.14. Пример нормализации.
- •4.15. Резюме. Нормальные формы.
- •5. Инфологическое моделирование.
- •5.1. Сущность и набор сущностей
- •5.2. Связи между сущностями.
- •5.3. Рекурсивная связь. Роли.
- •5.4. Множественные связи.
- •5.5. Суперсущности и производные сущности
- •5.6. Слабые наборы сущностей
- •5.7. Борьба с избыточнотью
- •5.8. Преобразование инфологической модели в физическую модель.
- •5.9. Пример инфологического моделирования.
- •6. Язык sql
- •6.1. История sql.
- •6.2. Структура sql.
- •6.3. Язык запросов
- •6.4. Простые запросы на выборку данных.
- •6.5. Агрегатные (групповые) функции.
- •6.6. Вложенные запросы
- •6.7. Внешние объединения
- •6.8. Изменение данных
- •Insert into r1 (o, fio, d) values (5, ‘Иванов’, ’бд’)
- •7. Представления.
- •8. Определение схемы базы данных и ограничений целостности
- •9. Транзакции
- •9.1. Свойства транзакций
- •9.2. Надежное хранение данных
- •9.3. Параллельное выполнение транзакций
- •9.3.1. Коллизия “пропавшие изменения” - lost update problem
- •9.3.2. Коллизия “промежуточные данные” - dirty read
- •9.3.3. Коллизия “Несогласованные данные” - unrepeatable read, inconsistent analysis
- •9.3.4. Коллизия “фантом” - phantom
- •9.4. Уровни изолированности
- •9.5. Тупики
- •10. Ограничение прав доступа в целях обеспечения безопасности
- •11. Физическая организация баз данных
- •11.1. Организация размещения данных.
- •11.2. Организация индексов
- •11.2.1. Поиск в бд.
- •11.2.2. Плотный индекс (индексно-прямые файлы).
- •11.2.3. Неплотный индекс (индексно-последовательные файлы).
- •11.2.4. Сбалансированные деревья.
- •11.2.5. Инвертированные списки.
- •12. Архитектура субд. Методы оптимизации запросов.
- •Логические преобразования запросов.
- •Преобразования запросов с изменением порядка реляционных операций.
- •13. Аналитические системы.
- •Анализ данных.
- •Хранилища данных
- •Типы ошибок
- •Способы реализации olap.
- •Требования к средствам реализации систем оперативной и аналитической обработки данных
- •Многомерная модель данных.
- •Разработка данных
- •14. Загружаемые процедуры.
- •In pr double precision)
- •If eof then leave Cl end if;
- •Insert into providers(code, name)
- •Values (nr.Codec, ‘*** новый поставщик ***’);
- •15. Модели совместного доступа к бд
- •15.1. Файл-серверная модель.
- •15.2. Модель клиент-сервер с бизнес-логикой на клиенте.
- •15.3. Модель клиент-сервер с бизнес-логикой на сервере субд (хранимые процедуры и триггеры) и частично на клиенте.
- •15.4. Модель сервера приложений (трёхзвенная архитектура, “тонкий клиент”)
- •Список литературы
6.3. Язык запросов
SELECT [ALL | DISTINCT] (<Список полей>|*)
FROM <Список таблиц>
[WHERE <Предикат – условие выборки или соединения>]
[GROUP BY <Список полей результата>]
[HAVING <Предикат – условие для групп>]
[ORDER BY <Список полей – как упорядочить>]
WHERE - предикаты сравнения {= <> < > >= <=}
предикат [NOT] BETWEEN A and B
предикат [NOT] IN множество (перечисление или встроенный запрос)
предикат сравнения с образцом [NOT] LIKE (_, % , остальные символы изображают сами себя)
предикат сравнения IS [NOT] NULL (NULL – неопр. 2 поля с значением NULL не равны). 2-значная логика расширяется до 3-значная логика
A
B
NOT A
A AND B
A OR B
TRUE
NULL
FALSE
NULL
TRUE
FALSE
NULL
TRUE
FALSE
NULL
NULL
TRUE
NULL
NULL
TRUE
NULL
FALSE
NULL
FALSE
NULL
NULL
NULL
NULL
NULL
NULL
предикат существования [NOT] EXIST – к подзапросам
SELECT – ключевое слово, начало любого запроса на выборку данных. FROM – ключевое слово, обязательное для запросов. Если таблиц несколько, то подразумевается декартово произведение. Таблицам можно присваивать псевдонимы для операции соединения таблицы с собой или для доступа из вложенного запроса к текущей записи внешнего запроса (см. далее).
SELECT * FROM R1, R2 – декартово произведение.
SELECT R1.A, R2.B FROM R1, R2 – проекция декартова произведения на атрибуты соответствующих таблиц. При этом дубликаты сохраняются в отличие от операции проектирования реляционной алгебры.
WHERE - ключевое слово, за которым следует предикат (горизонтальная фильтрация):
6.4. Простые запросы на выборку данных.
Основная форма запроса:
SELECT <желаемые атрибуты>
FROM <одно или несколько отношений>
WHERE <условия, накладываемые на кортежи отношений>
Модельная база данных, на которой будут рассмотрены формы запросов (совпадает с набором отношений, на котором рассматривались запросы реляционной алгебры):
R1 = (FIO, D, O)
R2 = (FIO, G)
R3 = (G, D)
Домен атрибута D (Дисциплина) – все дисциплины в ВУЗе, домен атрибута G (Группы) – все группы в ВУЗе. Пусть в них хранится следующая информация:
R1
FIO |
D |
O |
А |
БД |
5 |
Б |
БД |
4 |
В |
БД |
NULL |
Г |
Англ |
3 |
Б |
Англ |
5 |
… |
… |
… |
R2
FIO |
G |
А |
ИСЭ |
Б |
ИАС |
В |
ИСЭ |
Г |
ИСЭ |
R3
G |
D |
ИСЭ |
БД |
ИСЭ |
Англ |
ИСЭ |
Матем |
ИАС |
БД |
ИАС |
Англ |
Будем считать, что пустое значение в поле R1.O (которое обозначается NULL) означает, что студент пришел на экзамен, но не сдавал его.
1. Список имен студентов, сдавших на 5 экзамен по курсу “базы данных”:
Запрос на языке реляционной алгебры:
(R1[ Оценка=5 Дисциплина = “БД”]) [ФИО]
Эквивалент на SQL:
SELECT FIO FROM R1 WHERE D = ‘БД’ AND O = 5
2. Перечислить группы в ВУЗе:
R3[G]
Может показаться, что запрос SELECT G FROM R3 эквивалентен алгебраическому выражению. Однако это не так! Сравним результаты:
Алгебра
ИСЭ |
ИАС |
SQL
ИСЭ |
ИСЭ |
ИСЭ |
ИАС |
ИАС |
Разница связана с тем обстоятельством, что в реляционной алгебре используются истинные множества (в них один и тот же кортеж не может присутствовать дважды – вспомним определение отношения!), в то время как в SQL – мультимножества (в них кортеж может многократно дублироваться). Это связано с необходимостью решить проблему эффективного исполнения запросов. Поэтому эквивалентом алгебраического выражения является следующий запрос:
SELECT DISTINCT G FROM R3 – запрос на SQL
Слово DISTINCT позволяет в явной форме указать необходимость убрать дубли из результрующего отношения.
3. Кто должен сдавать экзамен по курсу “базы данных”?
R2 [R3.G = R2.G R3.D = ‘базы данных’] R3) [FIO]
SELECT FIO FROM R2, R3 WHERE R2.G = R3.G AND R3.D = ‘БД’
4. Кто должен сдавать экзамены (и какие):
SELECT FIO, D FROM R2, R3 WHERE R2.G = R3.G
5. Кто не имеет оценки (и по какой дисциплине), но приходил на экзамен
SELECT FIO, D FROM R1 WHERE O IS NULL
6. Кто провалил 2 или больше экзаменов?
R1 [R1.ФИО = R1’.ФИО R1.Дисциплина <> R1’.Дисциплина
R1.Оценка <= 2 R1’.Оценка <= 2] R1’) [ФИО]
SELECT DISTINCT a.FIO
FROM R1 a, R1 b
WHERE a.FIO = b.FIO AND a.D <> b.D AND a.O <= 2 AND b.O <= 2
В данном примере понадобилось ввести 2 имени для обозначения одного и того же отношения, т.е. синонимы. Как показано здесь, этого можно добиться путем указания синонима сразу после имени таблицы в разделе FROM. В случае переименования таблицы все ее поля, на которые мы ссылаемся в любой части запроса необходимо предварять синонимом: если написано FROM R1 a то следует писать a.FIO а не R1.FIO.
Раздел WHERE может включать условия, в которых строка сравнивается с образцом.
7. Выбрать студентов, фамилия которых начинается с А:
SELECT FIO FROM R2 WHERE FIO LIKE ‘А%’
8. Выбрать группы, в название которых входит буквосочетание ‘МИ’:
SELECT G FROM R1 WHERE G LIKE ‘%МИ%’
В SQL действует трехзначная логика: TRUE, FALSE, UNKNOWN. Когда значение сравнивается с NULL, результат сравнения равен UNKNOWN. Но запрос SELECT выбирает кортеж для результирующего отношения только при условии, что результат условия в разделе WHERE равен TRUE (а не FALSE или UNKNOWN).
Чтобы понять как работают AND, OR, NOT в 3-х значной логике, можно использовать следующую модель:
TRUE=1, FALSE=0, UNKNOWN=½.
AND соответсвует операции определения минимума MIN, OR- взятия макимума MAX, NOT(x) = 1-x.
Пример.
TRUE AND (FALSE OR NOT(UNKNOWN)) = MIN(1, MAX(0, (1-½))) = MIN(1, MAX(0, ½)) = MIN(1, ½) = ½ = UNKNOWN
9. Пусть дано отношение S содержащее данные:
ТОВАР |
ЦЕНА |
… |
|
БАНАНЫ |
NULL |
… |
|
Запрос SELECT * FROM S WHERE ЦЕНА > 50 OR ЦЕНА <= 50 не включит показанный кортеж, т. к. результат вычисления условия в разделе WHERE для этого кортежа равен UNKNOWN.