- •Предисловие
- •Основные функции систем управления базами данных (СУБД)
- •Основные понятия
- •Преимущества использования баз данных
- •Функции систем управления базами данных
- •Литература
- •Реляционная модель данных
- •Структуры данных. Фундаментальные свойства отношений
- •Целостность данных. Реляционные ключи
- •Манипулирование данными
- •Реляционная алгебра Кодда
- •Операции
- •Объединение
- •Пересечение
- •Разность
- •Декартово произведение
- •Сокращение (выборка, ограничение, селекция)
- •Проекция
- •Соединения
- •Деление
- •Приоритеты операций
- •Базис алгебры и ства операций
- •Базис
- •Свойства операций
- •Ограничения реляционной алгебры
- •Литература
- •Реляционное исчисление
- •Исчисление кортежей
- •Эквивалентность исчисления кортежей и реляционной алгебры
- •Исчисление доменов
- •Литература
- •Случаи неполной информации и ω-значения
- •Концепция трехзначной логики
- •Логические операторы
- •Кванторы
- •Арифметические операции и операции сравнения
- •ω-значения и домены
- •ω-значения и операторы реляционной алгебры
- •ω-значения и агрегирующие функции
- •Проблема интерпретации
- •ω-значения и ограничения целостности
- •Первичные ключи
- •Внешние ключи
- •Литература
- •Семантическое проектирование реляционных баз данных на основе ER-модели
- •Общий подход семантического моделирования
- •Основные понятия
- •Проектирование базы данных с помощью ER-модели
- •Литература
- •Проектирование реляционных баз данных при помощи нормализации
- •Жизненный цикл системы баз данных
- •Функциональные зависимости
- •Понятие функциональной зависимости
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Неприводимые множества зависимостей
- •Декомпозиция без потерь и функциональные зависимости
- •Диаграммы функциональных зависимостей
- •Сохранение независимости в смысле Риссанена
- •Многозначные зависимости
- •Нормализация
- •Понятие нормализации и её причины
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса–Кодда
- •Четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Литература
- •Основные принципы хранения данных во внешней памяти
- •Страничная организация хранения данных
- •Управление буферами внутренней памяти
- •Простая файловая организация страниц
- •Неупорядоченный файл
- •Упорядоченный файл
- •Индексирование
- •Индексно-прямой метод доступа
- •Индексно-последовательный метод доступа
- •Индекс на основе B+-деревья
- •Хэширование
- •Индексированные кластеры
- •Хэшированные кластеры
- •Литература
- •Управление транзакциями и синхронизация в реляционных СУБД
- •Понятие транзакции
- •Фундаментальные свойства транзакций
- •Изолированность транзакций
- •Синхронизационные блокировки
- •Простые блокировки
- •Гранулированные (намеренные) блокировки
- •Предикатные блокировки
- •Тупиковые ситуации
- •Метод временных меток
- •Механизм выделения версий данных
- •Литература
- •Журнализация и восстановление в реляционных СУБД
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Литература
- •Выполнение и оптимизация запросов в реляционных СУБД
- •Процесс оптимизации запроса
- •Преобразование запроса во внутреннюю форму
- •Преобразование запроса в каноническую форму
- •Выбор потенциальных низкоуровневых процедур
- •Генерация различных вариантов планов вычисления запроса и выбор плана с минимальными затратами
- •Низкоуровневая оптимизация операции выборки
- •Низкоуровневая оптимизация операции соединения
- •Литература
Если исключить оператор , то понадобится некоторый одноместный предикат, позволяющий определить, является ли подаваемый аргумент !-значением или нет, — пусть это будет предикат !is. Тогда без применения оператора запрос примет более громоздкий вид:
!T T P R |
^ pT :city ‘Лондон’q _ !ispT :cityq |
^ pT :job ‘Программист’q _ !ispT :jobq ^ |
||||||||
|
^ pT |
|
|
|
q ^ pT |
|
|
q |
) |
|
|
:city |
‘Лондон’ |
:job |
|||||||
|
|
|
|
‘Программист’ |
|
Кванторы
С кванторами @ и D в трехзначной логике дело обстоит так же, если вспомнить определение этих кванторов. Пусть область действия квантора есть множество tT1; : : : ; Tnu, тогда:
•Формула pDT qpFpT qq эквивалентна pFALSE_FpT1q_: : :_FpTnqq, где FALSE — тождественно ложный предикат. Т. е. формула принимает значение:
а) T тогда и только тогда, когда хотя бы один из операндов FpTiq принимает значение T, б) F тогда и только тогда, когда все операнды FpTiq принимают значение F,
в) U в противном случае.
•Формула p@T qpFpT qq эквивалентна pTRUE ^ FpT1q^ : : : ^ FpTnqq, где TRUE — тождественно истинный предикат. Т. е. формула принимает значение:
а) F тогда и только тогда, когда хотя бы один из операндов FpTiq принимает значение F, б) T тогда и только тогда, когда все операнды FpTiq принимают значение T,
в) U в противном случае.
Арифметические операции и операции сравнения
Предположим, что имеется элементарное логическое выражение A B, где A; B — атрибуты или константы одного или сравнимых доменов, P tă; ď; ą; ě; ; u — операция сравнения. Что делать, если один из операндов является !-значением (заложено в отношении) или принимает U-значение (является результатом промежуточного вычисления)? В этом случае все элементарное логическое выражение должно принять значение U. Таким образом, если хотя бы один операнд операции сравнения принимает значение U, то логическое выражение A B операции должно принимать значение U.
А что будет, если один из операндов операции сравнения является арифметическим выражением? Предположим, что имеется элементарное арифметическое выражение EpA1; : : : ; Anq, где E — допустимое арифметическое выражение, зависящее от переменных (кортежей или доменов) A1; : : : ; An и являющееся операндом операции сравнения . Если хотя бы один из атрибутов, участвующий в арифметическом выражении E является !-значением, то весь этот операнд операции сравнения принимает !-значение.
5.2. ω-значения и домены
Так как ! не является значением, то типы не могут содержать в своем множестве значений величину !, а значит, и домены тоже. Действительно, если бы типы могли содержать неопределенные значения какого-либо вида, то проверка ограничений целостности для них всегда завершалась бы с положительным результатом! Но поскольку типы фактически не могут содержать величину !, то «отношения», допускающие присутствие величины !, являются чем угодно, но только не реляционными отношениями.
Но ведь неопределенные !-значения можно рассматривать как специальное значение. Общая идея специальных значений заключается в том, чтобы просто применять подходящее специальное
27
значение, отличное от всех обычных значений атрибута, во всех тех случаях, когда обычное значение не может использоваться. При этом специальные значения обязательно должны принадлежать тем типам, в которых они могут использоваться, в частном случае специальное !-значение должно принадлежать не только всем типам, где оно может использоваться, но и также доменам, где семантически допустимо использование !-значения.
5.3. ω-значения и операторы реляционной алгебры
Рассмотрим влияние !-значений на базисные операторы реляционной алгебры:
1.Для получения проекции отношения требуется, кроме всего прочего, исключить дубликаты кортежей. В двухзначной логике два кортежа T1 и T2 считаются дубликатами тогда и только тогда, когда они имеют одинаковые значения соответствующих атрибутов. Но !-величина, которая может быть в значениях атрибутах, не равна никакому другому значению, даже самой себе. При этом Кодд говорит, что две !-величины, даже если они не равны друг другу, считаются дубликатами одна другой в целях исключения дубликатов кортежей1. В итоге получаем следующее:
Определение 1. Два кортежа T1 и T2 являются дубликатами тогда и только тогда, когда они имеют одинаковый набор атрибутов ta1; a2; : : : ; anu и @i P r1 : ns
•либо значение атрибута ai кортежа T1 равно значению атрибута ai кортежа T2
•либо оба значения атрибута ai в кортежах T1 и T2 равны !.
Используя такое определение дубликатов кортежей определение оператора проекции остается прежним, при этом теперь есть разница между «кортежи совпадают» и «кортежи являются дубликатами».
2.Выборка: здесь достаточно уточнить, что следует выбирать только те кортежи, для которых условие выборки принимает значение T и никакое другое (F или U).
3.Объединение тоже подразумевает исключение дубликатов кортежей, поэтому здесь тоже будет использоваться расширенное определение дубликатов кортежей, а значит, само определение оператора не изменится (если только явно добавить уточнение, что дубликаты должны отсутствовать).
4.На декартово произведение !-значения никакого влияния не оказывают.
5.С разностью дела обстоят аналогично проекции и объединению — используется расширенное определение дубликатов кортежей и уточнение о том, что результирующее отношение не должно содержать дубликатов кортежей.
5.4. ω-значения и агрегирующие функции
Что делать, если среди значений атрибута, для которого вычисляется агрегирующая функция, есть !-значения? Все агрегирующие функции, кроме варианта функции COUNT(*) подсчёта количества кортежей (звездочка означает именно это, а не по конкретному атрибуту), пропускают !- значения, т. е. если COUNT подается конкретный атрибут, то он тоже пропускает !-значения.
Почему так? По поводу функции COUNT еще можно поспорить на правомерность такого подхода, ведь подсчёт идет по атрибуту кортежа, а раз там есть !-значения, то неужели их не надо считать? Конечно, на практике таких двусмысленностей избегают, считая либо по ключевому атрибуту, который уж точно не содержит !-значений, либо ясно понимают, что не не нужно учитывать кортежи !-значениями либо просто исключая эти кортежи с помощью условия выборки.
1 Такое казалось бы противоречие объясняется Коддом следующим образом: «...проверка на равенство в процессе исключения дубликатов кортежей... выполняется на более низком уровне детализации по сравнению с проверкой на равенство при оценке условий выборки. Поэтому здесь можно применить другое правило».
28