- •Введение в бд
- •Файловые системы
- •Системы с базами данных
- •Модели данных
- •Альтернативная терминология Терминология, используемая в реляционной модели, порой может привести к путанице, поскольку помимо предложенных двух наборов терминов существует еще один – третий.
- •Сетевая модель данных
- •Иерархическая модель данных
- •Вопросы:
- •Реляционная модель.
- •Реляционная алгебра. Реляционное исчисление.
- •Реляционная модель
- •Упражнения:
- •Реляционные языки
- •Реляционная алгебра
- •Унарные операции реляционной алгебры
- •Операции с множествами
- •Операции соединения
- •Деление
- •Реляционное исчисление
- •Реляционное исчисление кортежей
- •Реляционное исчисление доменов
- •Другие языки
- •Тема 3 Моделирование данных Модель «сущность-связь»
- •Элементы модели «сущность-связь»
- •Сущность
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность-связь»
- •Изображение атрибутов в диаграммах «сущность-связь»
- •Слабые сущности
- •Подтипы сущностей
- •Пример er-диаграммы
- •Диаграммы «сущность-связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Семантическая объектная модель
- •Семантические объекты
- •Определение семантических объектов
- •Атрибуты
- •Кардинальное число атрибута
- •Экземпляры объектов
- •Парные атрибуты
- •Объектные идентификаторы
- •Домены атрибутов
- •Представления семантических объектов
- •Создание семантических объектных моделей данных
- •Пример: база данных администрации нтуу «кпи»
- •Спецификация объектов
- •Типы объектов
- •Простые объекты
- •Составные объекты
- •Гибридные объекты
- •Ассоциативные объекты
- •Объекты вида родитель/подтип
- •Объекты вида архетип/версия
- •Переход от семантической объектной модели к модели «сущность-связь»
- •Вопросы:
- •Упражнения:
- •Тема 4 Нормализация
- •Классы отношений
- •Нормальные формы от первой до пятой
- •Тема 5 Методология проектирования баз данных Введение в методологию проектирования баз данных
- •Методология концептуального проектирования базы данных
- •Методология логического проектирования реляционных баз данных
- •Суть состоит в том, что при устранении избыточности очень важно исследовать значение каждой из связей, существующих между сущностями.
- •Методология физического проектирования базы данных
- •Трехуровневая архитектура ansi-sparc
- •Система управления Базами Данных
- •1. Хранение, извлечение и обновление данных
- •2. Каталог доступный конечным пользователям
- •Поддержка транзакций
- •Сервисы управления параллельностью
- •Сервисы восстановления
- •6. Сервисы контроля доступа к данным
- •Поддержка обмена данными
- •8. Вспомогательные службы
- •Преимущества:
- •Недостатки:
- •Вопросы:
- •Упражнения:
- •История языка sql
- •Особая роль языка sql
- •Используемая терминология
- •Запись операторов sql
- •Манипулирование данными
- •Литералы
- •Простые запросы
- •Выборка строк (конструкция where)
- •Сортировка результатов (конструкция order by)
- •Использование агрегирующих функций языка sql
- •Группирование результатов (конструкция group by)
- •Ограничения на выполнение группирования (конструкция having)
- •Подзапросы
- •Ключевые слова any и all
- •Многотабличные запросы
- •Внешние соединения
- •Выполнение соединений
- •Ключевые слова exists и not exist
- •Комбинирование результирующих таблиц (операции union, intersect и except)
- •Изменение содержимого базы данных
- •Добавление новых данных в таблицу (оператор insert)
- •Модификация данных в базе (оператор update)
- •Удаление данных из базы (оператор delete)
- •Скалярные типы данных языка sql
- •Логические данные (тип boolean)
- •Символьные данные (тип character)
- •Битовые данные (тип bit)
- •Точные числовые данные (тип exact numeric)
- •Округленные числовые данные (тип approximate numeric)
- •Дата и время (тип datetime)
- •Интервальный тип данных interval
- •Скалярные операторы
- •Средства поддержки целостности данных
- •Обязательные данные
- •Ограничения для доменов
- •Целостность сущностей
- •Ссылочная целостность
- •Требования данного предприятия
- •Определение данных
- •Создание баз данных
- •Создание таблиц (оператор create table)
- •Модификация определения таблицы (оператор alter table)
- •Удаление таблиц (оператор drop table)
- •Создание индекса (оператор create index)
- •Удаление индекса (оператор drop index)
- •Представления
- •Создание представлений (оператор create view)
- •Удаление представлений (оператор drop view)
- •Замена представлений
- •Ограничения на использование представлений
- •Обновление данных в представлениях
- •Использование конструкции with check option
- •Преимущества и недостатки представлений
- •Преимущества
- •Недостатки
- •Материализация представлений
- •Использование транзакций
- •Немедленные и отложенные ограничения поддержки целостности данных
- •Управление доступом к данным
- •Идентификаторы пользователей и права владения
- •Привилегии
- •Предоставление привилегий другим пользователям (оператор grant)
- •Отмена предоставленных пользователям привилегий (оператор revoke)
- •Приложение
- •Тема 7.3 Хранимые процедуры и функции. Триггеры.
- •Создание хранимых процедур и функций
- •Простые формы выражений
- •Поддержка транзакций
- •Свойства транзакций
- •Архитектура базы данных
- •Управление параллельным доступом
- •Проблема потерянного обновления
- •Проблема зависимости от незафиксированных результатов (или "грязного" чтения)
- •Проблема анализа несогласованности
- •Упорядочиваемость и восстанавливаемость
- •Конфликтная упорядочиваемость
- •Упорядочиваемость по просмотру
- •Восстанавливаемость
- •Методы управления параллельным доступом
- •Методы блокировки
- •Двухфазная блокировка
- •Управление параллельным выполнением при использовании индексных структур
- •Защелки
- •Взаимоблокировка
- •Тайм-ауты
- •Предотвращение взаимоблокировок
- •Обнаружение взаимоблокировок
- •Частота выполнения операции обнаружения взаимоблокировок
- •Возобновление нормальной работы после обнаружения взаимоблокировки
- •Использование временных отметок
- •Правило записи Томаса
- •Сравнение методов
- •Упорядочение временных отметок в случае многих версий
- •Оптимистические методы упорядочения
- •Степень детализации блокируемых элементов данных
- •Иерархия степеней детализации
- •Блокировка с учетом нескольких степеней детализации
- •Восстановление базы данных
- •Необходимость восстановления
- •Транзакции и восстановление
- •Управление буферами базы данных
- •Функции восстановления
- •Механизм резервного копирования
- •Файл журнала
- •Создание контрольных точек
- •Методы восстановления
- •Метод восстановления с использованием отложенного обновления
- •Метод восстановления с использованием немедленного обновления
- •Метод теневого страничного обмена
- •Улучшенные модели транзакций
- •Модель вложенных транзакций
- •Эмуляция механизма вложенных транзакций с помощью точек сохранения
- •Хроники
- •Модель многоуровневых транзакций
- •Динамическая реструктуризация
- •Модели рабочих потоков
- •Общий обзор методов обработки запросов
- •Основные этапы обработки запросов
- •Динамическая и статическая оптимизация запросов
- •Декомпозиция запросов
- •Нормализация
- •Семантический анализ
- •Упрощение
- •Реструктуризация запросов
- •Эвристический подход к оптимизации запросов
- •Правила преобразования операций реляционной алгебры
- •Оценка стоимости операций реляционной алгебры
- •Статистические показатели базы данных
- •Вариант 6. Поиск по равенству значению кластеризующего (вторичного) индекса
- •Вариант 7. Поиск по равенству значению некластеризующего (вторичного) индекса
- •Составные предикаты
- •Конъюнктивная выборка без дизъюнкций
- •Выборки с дизъюнкциями
- •Конвейерная обработка данных
- •Тема 10
- •Основные типы угроз
- •Контрмеры – компьютерные средства контроля
- •Авторизация пользователей
- •Привилегии
- •Права владения и привилегии
- •Представления (подсхемы)
- •Резервное копирование и восстановление
- •Поддержка целостности
- •Шифрование
- •Raid (массив независимых дисковых накопителей с избыточностью)
- •Средства защиты субд Microsoft Access
- •Установка пароля
- •Защита на уровне пользователя
Удаление индекса (оператор drop index)
Если для таблицы базы данных был создан индекс, который впоследствии оказался ненужным, то его можно удалить с помощью оператора DROP INDEX. Этот оператор имеет следующий формат:
DROP INDEX IndexName
Представления
Представление – динамически сформированный результат одной или нескольких реляционных операций, выполненных над отношениями базы данных с целью получения нового отношения.
Представление является виртуальным отношением, которое не всегда реально существует в базе данных, но создается по запросу определенного пользователя в ходе выполнения этого запроса. С точки зрения пользователя базы данных представление выглядит как реальная таблица данных, содержащая набор поименованных столбцов и строк данных. Но в отличие от реальных таблиц представления не всегда существуют в базе как некоторый набор сохраняемых значений данных. В действительности доступные через представления строки и столбцы данных являются результатом выполнения запроса, заданного при определении представления. СУБД сохраняет определение представления в базе данных. Обнаружив ссылку на представление, СУБД применяет один из двух следующих подходов для формирования представления. При первом подходе СУБД отыскивает определение представления и преобразуют исходный запрос, лежащий в основе представления, в эквивалентный запрос к таблицам, использованным в определении представления, после чего модифицированный запрос выполняется. Этот процесс слияния запросов, называется заменой представления (под этим подразумевается замена представления оператором SQL, который обращается к базовым таблицам). При втором подходе, который называется материализацией представления, готовое представление хранится в базе данных в виде временной таблицы, а его актуальность постоянно поддерживается по мере обновления всех таблиц, лежащих в его основе. Теперь познакомимся с тем, как создаются и используются представления.
Создание представлений (оператор create view)
Оператор CREATE VIEW имеет следующий формат:
CREATE VIEW ViewName [ (newCoIumntfame [, . . . ] ) ]
AS subselect [WITH |CASCADED |LOCAL| CHECK OPTION]
Представление определяется с помощью подзапроса sutoselect, оформленного в виде оператора SELECT языка SQL. Существует необязательная возможность присвоения собственного имени каждому из столбцов представления. Если указывается список имен столбцов, то он должен иметь количество элементов, равное количеству столбцов в результирующей таблице запроса, заданного параметром subselect. Если список имен столбцов опущен, каждый столбец представления будет иметь имя соответствующего столбца результирующей таблицы запроса, заданного параметром subselect. Список имен столбцов должен обязательно задаваться в том случае, если в именах столбцов результирующей таблицы имеет место неоднозначность. Подобная ситуация возникает в тех случаях, когда подзапрос включает вычисляемые поля, а конструкция AS с именами столбцов результирующей таблицы не содержит для них имен или же когда результирующая таблица создается с помощью операции соединения и включает столбцы с одинаковыми именам.
Заданный параметром subseJect подзапрос принято называть определяющим запросом.
Если указана конструкция WITH CHECK OPTION, то гарантируется, что в тех случаях, когда строка данных не удовлетворяет условию, указанному в конструкции WHERE определяющего запроса представления, она не будет добавлена в его базовую таблицу. Следует отметить, что для успешного создания представления необходимо иметь привилегию SELECT для всех упоминаемых в определяющем запросе таблиц, а также привилегию USAGE для всех доменов, используемых в указанных в запросе столбцах. Хотя все представления создаются с помощью одного и того же метода, на практике для различных целей используются разные типы представлений. Назначение представлений различных типов мы продемонстрируем на нескольких конкретных примерах.
Пример 7.2.3. Создание горизонтального представления
Создайте представление, позволяющее преподавателю просматривать данные только тех студентов, у которых проходной бал равен '3.8'. Горизонтальное представление позволяет ограничить доступ пользователей только определенными строками, выбранными из одной или нескольких таблиц.
CREATE VIEW БаллСтудент
AS SELECT *
FROM Студент
WHERE СРБАЛЛ = '3,8';
В результате выполнения этого оператора будет создано представление БаллСтудент, включающее все столбцы таблицы Студент, но содержащее только те ее строки, в которых средний балл студентов равен '3,8'. (Строго говоря, в этом представлении столбец СРБАЛЛ не является необходимым и вполне может быть исключен из определения представления, поскольку он всегда будет содержать одно и то же значение – '3,8'.) Если теперь выполнить приведенный ниже оператор SQL, его результат будет иметь вид, показанный в табл. 7.2.3.
SELECT * FROM БаллСтудент;
Таблица 7.2.3. Данные, доступные в представлении БаллСтудент
Номер студента в группе |
Группа |
ФИО |
Год рождения |
Адрес |
Средний балл |
12 |
ТМ-31 |
Бабич Ю. |
1986 |
с.Жмеринка |
3,8 |
19 |
ТЗ-31 |
Самойленко Ю. |
1986 |
Бердычев |
3,8 |
Для обеспечения того, чтобы преподаватель мог видеть только те строки таблицы Студент, доступ к которым ему разрешен, следует полностью запретить ему прямой доступ к этой таблице, но разрешить доступ к представлению БаллСтудент. В результате преподаватель будет иметь собственное представление данных таблицы Студент, содержащее сведения только о тех студентах, у которых средний балл равен 3,8.
Пример 7.2.4. Создание вертикального представления
Создайте представление, содержащее данные только тех студентов, у которых проходной бал равен '3.8', но не включающее сведений об их адресе, поскольку сведения о адресе студентов должны быть доступны только преподавателям. Вертикальные представления позволяют ограничить доступ пользователей только определенными столбцами, выбранными из одной или нескольких таблиц балы данных.
CREATE VIEW БаллСтудентАдрес
AS SELECT НС, НГ, ФИО, ГОДР
FROM Студен
WHERE СРБАЛЛ = '3,8';
Обратите внимание, что определение этого представления можно переписать, воспользовавшись вместо таблицы Студент представлением БаллСтудент:
CREATE VIEW БаллСтудентАдрес
AS SELECT НС, НГ, ФИО, ГОДР
FROM БаллСтудент;
В любом случае будет создано представление БаллСтудентАдрес, содержащее все столбцы таблицы Студент, за исключением столбцов адрес и средний балл. Данные, содержащиеся в этом представлении, показаны в табл. 7.2.4.
Таблица 7.2.4. Данные, доступные в представлении БаллСтудентАдрес
Номер студента в группе |
Группа |
ФИО |
Год рождения |
12 |
ТМ-31 |
Бабич Ю. |
1986 |
19 |
ТЗ-31 |
Самойленко Ю. |
1986 |
Для того чтобы гарантировать, что только преподаватель будет иметь доступ к сведениям об адресе студентов, всем студентам, у которых проходной бал равен '3.8' должно быть предоставлено право доступа только к представлению БаллСтудент, но не к самой таблице Студент или представлению БаллСтудентАдрес.
Представления, в которых опускается несколько столбцов исходной таблицы, часто называют вертикальными представлениями, поскольку при их создании таблица разделяется на части по вертикали.
Вертикальные представления обычно используются в тех случаях, когда сохраняемые в таблице данные обрабатываются различными пользователями или группами пользователей, С помощью вертикальных представлений в распоряжение пользователей каждого типа предоставляется виртуальная таблица, состоящая только из тех столбцов, которые им необходимы.
Пример 7.2.5. Группирование по нескольким столбцам
Определите количество оценок, полученных каждым из студентов.
SELECT s.НГ, s.НС, COUNT(*) AS count
FROM Студент s, Успеваемость y
WHERE s.НС = у.НС AND s.НГ=у.НГ
GROUP BY s.НС, s.НГ
ORDER BY s.НС, s.НГ;
Чтобы составить требуемый отчет, прежде всего необходимо выяснить, кто из студентов института получал оценки. Эту задачу можно решить посредством соединения таблиц СТУДЕНТ и УСПЕВАЕМОСТЬ по столбцам НГ и НС в конструкциях FROM/WHERE. Затем необходимо сформировать группы, состоящие из номера группы и номеров ее студентов, для чего следует применить конструкцию GROUP BY. Наконец, результирующая таблица должна быть отсортирована с помощью задания конструкции ORDER BY. Результаты выполнения запроса представлены а табл. 7.2.5.
Таблица 7.2.5. Результат выполнения запроса из примера
Ном. студента |
Номер группы |
count |
12 |
ТМ-31 |
1 |
15 |
ТЗ-32 |
1 |
19 |
ТЗ-31 |
1 |
20 |
ТИ-32 |
1 |
21 |
ТМ-33 |
1 |
23 |
ТИ-31 |
1 |
Пример 7.2.6. Представление, формируемое путем группирования и соединения
Создайте представление, содержащее данные о количестве оценок, полученных каждым студентом. Оно должно включать номер студента, номер группы и сведения о количестве оценок, которые он получил (см. предыдущий пример).
CREATE VIEW СтудентУспевCnt (НС, НГ, count)
AS SELECT s.НГ, s.НС, COUNT(*)
FROM Студент s, Успеваемость у
WHERE s.НС = у.НС
GROUP BY s.НС, у.НГ;
В результате будут получены данные, показанные в табл. 7.2.6. Этот пример иллюстрирует использование подзапроса, содержащего конструкцию GROUP BY (в результате чего создается представление, называемое сгруппированным представлением) и обращающегося к данным нескольких таблиц (подобные представления называют соединенными представлениями). Одной из важнейших причин использования представлений является стремление к упрощению многотабличных запросов. После определения представления с соединением нескольких таблиц можно будет использовать простейшие однотабличные запросы к этому представлению вместо сложных запросов с выполнением того же самого многотабличного соединения. Отметим, что в приведенное выше определение представления потребовалось включить список имен столбцов, поскольку в нем использована агрегирующая функция COUNT.
Таблица 7.2.6. Данные, доступные в представлении СтудентУспевCnt
Ном. студента |
Номер группы |
count |
12 |
ТМ-31 |
1 |
15 |
ТЗ-32 |
1 |
19 |
ТЗ-31 |
1 |
20 |
ТИ-32 |
1 |
21 |
ТМ-33 |
1 |
23 |
ТИ-31 |
1 |
