- •Шехтман в. Е.
- •1. Базы данных и модели данных
- •1.1. Введение.
- •1.2. Файлы операционной системы
- •1.3. Пример базы данных.
- •1.4. Иерархическая модель данных
- •1.5. Сетевая модель данных
- •1.6. Инвертированные списки.
- •2. Введение в реляционную модель данных.
- •1.7. Реляционная модель данных
- •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.4. Модель сервера приложений (трёхзвенная архитектура, “тонкий клиент”)
- •Список литературы
- •15. Модели совместного доступа к бд
- •15.1. Файл-серверная модель.
- •15.2. Модель клиент-сервер с бизнес-логикой на клиенте.
- •15.3. Модель клиент-сервер с бизнес-логикой на сервере субд (хранимые процедуры и триггеры) и частично на клиенте.
9.2. Надежное хранение данных
Транзакции применяются для надёжного хранения данных.
Результаты зафиксированных транзакций должны быть сохранены после восстановления.
Результаты незафиксированных транзакций должны отсутствовать в восстановленном состоянии БД.
Журнал транзакций – восстановление согласованного состояния БД после любого рода аппаратных и программных сбоев – для этого нужна дополнительная информация.
Т. е. восстанавливается последнее по времени согласованное состояние БД.
Случаи, при которых следует производить восстановление состояния БД:
Индивидуальный откат транзакции – отменить последствия операторов модификации данных в транзакции.
Rollback
Авария
Принудительный откат транзакции при взаимной блокировке при параллельном выполнении транзакций - для выхода из тупика транзакция может быть выбрана в качестве жертвы ядром СУБД
Восстановление после внезапной потери ОЗУ (мягкий сбой) – теряются данные, содержащиеся в буферах ОЗУ – восстановление данных по ЖТ на дисках
Выключение электропитания
Неустранимый сбой процессора
Восстановление после сбоя дисков (жесткий сбой) – архивная копия и журнал транзакций –
Копирование БД из архивной копии
По ЖТ в прямом направлении все операции выполняются
Для транзакций, не закончившихся к моменту сбоя - откат
Локальные ЖТ – для индивидуальных откатов (виртуальная память), общий ЖТ – мягкие и жесткие сбои.
Но может быть только общий ЖТ.
ЖТ – последовательный файл – каждое изменение БД
№ Транз, знач. атрибутов
Протокол с отложенными изменениями begin, (T, ID, attr, Value), …Commit – сначала протокол, потом все изменения
Протокол с немедленными изменениями begin, (T, ID, attr, Old, New), …Commit – сначала запись в ЖТ, после в БД.
При Commit – больше ничего не надо, при Rollback – UNDO – начиная с begin.
9.3. Параллельное выполнение транзакций
Цель введения механизма транзакций - не только корректно выполнять индивидуальные транзакции и восстанавливать целостность после сбоя, но и корректная параллельная работа всех пользователей. Это свойство называется изолированность транзакций.
Во время выполнения параллельных транзакций над одними и теми же объектами базы данных возможно возникновение разных проблем, называемых коллизиями совместного доступа. Виды коллизий совместного доступа рассмотрим на пример процесса параллельной продажи двумя продавцами товара одного вида.
9.3.1. Коллизия “пропавшие изменения” - lost update problem
Э
та
проблема проявляется, когда две
транзакции изменяют одну запись
одновременно.
Это возможно, когда приложение, в котором выполняется транзакция 1, изменяет запись, уже измененную приложением, в котором выполняется транзакция 2.
9.3.2. Коллизия “промежуточные данные” - dirty read
Одна транзакция “видит” промежуточные, незафиксированные результаты работы другой транзакции. Приложение, в котором выполняется транзакция 2, “видит” изменения в записи, уже измененной приложением, в котором выполняется транзакция 1.
