- •Основные понятия информационных систем Информация и субд
- •Файловые системы
- •Структуры файлов
- •Именование файлов
- •Области применения файлов
- •Потребности информационных систем
- •Структуры хранения данных и методы доступа к ним
- •Доступ к базе данных
- •Диспетчер дисков
- •Диспетчер файлов
- •Кластеризация
- •Наборы страниц и файлы
- •Индексирование
- •Плотное и неплотное индексирование
- •Структура типа б-дерева
- •Хеширование
- •Задание
- •Расширяемое хеширование
- •Цепочки указателей
- •Управление данными, размещенными в оперативной памяти
- •Функции и архитектура субд
- •Примеры приложений субд
- •Обзор основных компонентов субд
- •Диспетчер памяти
- •Процессор запросов
- •Диспетчер транзакций
- •Параллелизм
- •Задание. Привести схему применения двухфазной блокировки для решения проблемы незафиксированной зависимости и проблемы несовместимого анализа.
- •Журнализация
- •Поддержка языков бд
- •Типовая организация современной субд
- •Ранние подходы к организации бд
- •Основные особенности систем, основанных на инвертированных списках
- •Структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Иерархические системы
- •Иерархические структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Сетевые системы
- •Сетевые структуры данных
- •Манипулирование данными сетевой схемы
- •Ограничения целостности сетевых систем
- •Достоинства и недостатки
- •Реляционные базы данных Общие понятия и терминология реляционного подхода
- •Тип данных
- •Фундаментальные свойства отношений (таблиц)
- •Реляционная модель
- •Каталог
- •Базовые таблицы, представления, снимки и запросы
- •Отношения и предикаты
- •Null-значения; потенциальные и внешние ключи
- •Базисные операции над реляционными данными
- •5.1. Реляционная алгебра
- •5.1.1. Общая интерпретация реляционных операций
- •Замкнутость реляционной алгебры и операция переименования
- •Особенности теоретико-множественных операций реляционной алгебры
- •Специальные реляционные операции
- •Операция взятия проекции
- •Операция соединения отношений
- •Операция деления отношений
- •Упражнения
- •Задание
- •Операция расширения и подведения итогов
- •Операция подведения итогов
- •Задания
- •Операторы обновления
- •Упражнения по запросам
- •5.2. Реляционное исчисление
- •Кортежные переменные и правильно построенные формулы
- •Еще раз о свободных и связанных переменных
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •Список литературы
Операция деления отношений
Эта операция наименее очевидна из всех операций реляционной алгебры и поэтому нуждается в более подробном объяснении. Пусть заданы два отношения - A с заголовком {a1, a2, ..., an, b1, b2, ..., bm} и B с заголовком {b1, b2, ..., bm}. Будем считать, что атрибут biотношения A и атрибут biотношения B не только обладают одним и тем же именем, но и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом a, а множество атрибутов {bj} - составным атрибутом b. После этого будем говорить о реляционном делении бинарного отношения A(a,b) на унарное отношение B(b).
Результатом деления A на B является унарное отношение C(a), состоящее из кортежей v таких, что в отношении A имеются кортежи <v, w> такие, что множество значений {w} включает множество значений атрибута b в отношении B.
Предположим, что в базе данных сотрудников поддерживаются два отношения: СОТРУДНИКИ ( ИМЯ, ОТД_НОМЕР ) и ИМЕНА ( ИМЯ ), причем унарное отношение ИМЕНА содержит все фамилии, которыми обладают сотрудники организации. Тогда после выполнения операции реляционного деления отношения СОТРУДНИКИ на отношение ИМЕНА будет получено унарное отношение, содержащее номера отделов, сотрудники которых обладают всеми возможными в этой организации именами.
Поясним сказанное несколькими примерами. Пусть делимое отношение DENDсодержит номера поставщиков и номера, поставляемых ими деталей.
S# |
P# |
|
.. |
.. |
S1 |
P1 |
|
S2 |
P1 |
S1 |
P2 |
|
S2 |
P2 |
S1 |
P3 |
|
S3 |
P2 |
S1 |
P4 |
|
S4 |
P2 |
S1 |
P5 |
|
S4 |
P4 |
S1 |
P6 |
|
S4 |
P5 |
.. |
.. |
|
|
|
Для трех вариантов делителя DOR:
P# |
|
P# |
|
P# |
P1 |
|
P2 |
|
P1 |
|
|
P4 |
|
P2 |
|
|
|
|
P3 |
|
|
|
|
P4 |
|
|
|
|
P5 |
|
|
|
|
P6 |
результаты деления DENDDEVIDEBYDORпредставляются соответственно отношениями
S# |
|
S# |
|
S# |
S1 |
|
S1 |
|
S1 |
S2 |
|
S4 |
|
|
Обратите внимание на последний пример, в котором делителем является отношение, содержащее номера всех известных в данный момент деталей; в результате, очевидно, получим поставщиков, поставляющих все эти детали.
Упражнения
Получить имена поставщиков, которые поставляют деталь Р2.
Получить имена поставщиков, которые поставляют, по крайней мере, одну красную деталь.
Получить имена поставщиков, которые поставляют все детали.
Получить все пары номеров поставщиков, размещенных в одном городе.
Получить номера поставщиков, поставляющих, по крайней мере, все те детали, которые поставляет поставщик S2.
Получить имена поставщиков, которые не поставляют деталь Р2.
Деление, также как пересечение и соединение не является примитивной операцией реляционной алгебры. Выразить эти три операции через остальные пять примитивных операций.
Для выполнения упражнений используются следующие отношения:
Поставщики (S); атрибуты:S# (номер поставщика),Sname(имя поставщика),CITY(город)
Детали (P); атрибуты:P# (номер детали),Pname(название детали),Color(цвет детали)
Заказы (SP); атрибуты:S# (номер поставщика),P# (номер детали),Qty(количество).
В общем случае выражения реляционной алгебры служат для символического высокоуровневого представления намерений пользователя (например, некоторого определенного запроса). Именно поэтому ими можно манипулировать в соответствии с многочисленными правилами преобразования. Например, выражение
(( SPJoinS)WhereP# = ‘P2’) [SNAME]
(имена поставщиков, поставляющих деталь Р2) можно преобразовать в логически эквивалентное, но, возможно, более рациональное выражение
(( SP Where P# = ‘P2’) Join S) [SNAME]