- •Основы систем баз данных
- •Содержание
- •Введение
- •В первом разделе рассматриваются базовые понятия реляционной модели данных. Дается общая характеристика реляционной модели данных
- •Раздел 1. Базовые понятия реляционной модели данных. Общая характеристика реляционной модели данных
- •1.1. Типы данных
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •1.2. Домены
- •1.3. Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •1.4. Контрольные вопросы
- •Раздел 2. Реляционная алгебра. Обзор реляционной алгебры
- •2.1. Замкнутость реляционной алгебры
- •2.2. Отношения, совместимые по типу
- •2.3. Оператор переименования атрибутов
- •2.4. Теоретико-множественные операторы Объединение
- •Пересечение
- •Вычитание
- •Декартово произведение
- •Специальные реляционные операторы Выборка (ограничение, селекция)
- •Проекция
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение
- •Деление
- •2.5. Примеры использования реляционных операторов
- •Невыразимость транзитивного замыкания реляционными операторами
- •Кросс-таблицы
- •2.6. Контрольные вопросы
- •Рздел 3. Нормальные формы отношений. Этапы разработки базы данных
- •3.1. Критерии оценки качества логической модели данных
- •Адекватность базы данных предметной области
- •Легкость разработки и сопровождения базы данных
- •Скорость операций обновления данных (вставка, обновление, удаление)
- •Скорость операций выборки данных
- •Основной пример
- •1Нф (Первая Нормальная Форма)
- •Аномалии обновления
- •Аномалии вставки (insert)
- •Аномалии обновления (update)
- •Аномалии удаления (delete)
- •3.2. Функциональные зависимости
- •Определение функциональной зависимости
- •Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •3.3. 2Нф (Вторая Нормальная Форма)
- •Анализ декомпозированных отношений
- •Оставшиеся аномалии вставки (insert)
- •Оставшиеся аномалии обновления (update)
- •Оставшиеся аномалии удаления (delete)
- •3.4. 3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •3.5. Анализ критериев для нормализованных и ненормализованных моделей данных Сравнение нормализованных и ненормализованных моделей
- •3.6. Oltp и olap-системы
- •3.7. Корректность процедуры нормализации - декомпозиция без потерь. Теорема Хеза
- •3.8. Контрольные вопросы
- •Раздел 4. Нормальные формы более высоких порядков
- •4.1. Нфбк (Нормальная Форма Бойса-Кодда)
- •4.2. 4Нф (Четвертая Нормальная Форма)
- •4.3. 5Нф (Пятая Нормальная Форма)
- •4.4. Продолжение алгоритма нормализации (приведение к 5нф)
- •4.5. Контрольные вопросы
- •Раздел 5. Элементы модели "сущность-связь"
- •5.1. Основные понятия er-диаграмм
- •5.2. Пример разработки простой er-модели
- •5.3. Концептуальные и физические er-модели
- •5.4. Контрольные вопросы
- •Раздел 6. Элементы языка sql
- •6.1. Операторы sql
- •Операторы ddl (Data Definition Language) - операторы определения объектов базы данных
- •Операторы dml (Data Manipulation Language) - операторы манипулирования данными
- •Операторы защиты и управления данными
- •6.2. Примеры использования операторов манипулирования данными
- •Insert - вставка строк в таблицу
- •Примеры использования оператора select
- •Отбор данных из одной таблицы
- •Отбор данных из нескольких таблиц
- •Использование имен корреляции (алиасов, псевдонимов)
- •Использование агрегатных функций в запросах
- •Использование агрегатных функций с группировками
- •Использование подзапросов
- •Использование объединения, пересечения и разности
- •Синтаксис оператора выборки данных (select)
- •Синтаксис оператора выборки
- •Синтаксис соединенных таблиц
- •Синтаксис условных выражений раздела where
- •Порядок выполнения оператора select
- •Стадия 1. Выполнение одиночного оператора select
- •Стадия 2. Выполнение операций union, except, intersect
- •Стадия 3. Упорядочение результата
- •Как на самом деле выполняется оператор select
- •Реализация реляционной алгебры средствами оператора select (Реляционная полнота sql)
- •6.3. Контрольные вопросы
- •Заключение
- •Библиографический список
Синтаксис условных выражений раздела where
Условное выражение, используемое в разделе WHERE оператора SELECT должно вычисляться для каждой строки-кандидата, отбираемой оператором SELECT. Условное выражение может возвращать одно из трех значений истинности: TRUE, FALSE или UNKNOUN. Строка-кандидат отбирается в результатирующее множество строк только в том случае, если для нее условное выражение вернуло значение TRUE.
Условные выражения имеют следующий синтаксис (в целях упрощения изложения приведены не все возможные предикаты):
Условное выражение ::= [ ( ] [NOT] {Предикат сравнения | Предикат between | Предикат in | Предикат like | Предикат null | Предикат количественного сравнения | Предикат exist | Предикат unique | Предикат match | Предикат overlaps} [{AND | OR} Условное выражение] [ ) ] [IS [NOT] {TRUE | FALSE | UNKNOWN}]
Предикат сравнения ::= Конструктор значений строки {= | < | > | <= | >= | <>} Конструктор значений строки
Пример 33. Сравнение поля таблицы и скалярного значения:
POSTAV.VOLUME > 100
Пример 34. Сравнение двух сконструированных строк:
(PD.PNUM, PD.DNUM) = (1, 25)
Этот пример эквивалентен условному выражению
PD.PNUM = 1 AND PD.DNUM = 25
Предикат between ::= Конструктор значений строки [NOT] BETWEEN Конструктор значений строки AND Конструктор значений строки
Пример 35. PD.VOLUME BETWEEN 10 AND 100
Предикат in ::= Конструктор значений строки [NOT] IN {(Select-выражение) | (Выражение для вычисления значения.,..)}
Пример 36.
P.PNUM IN (SELECT PD.PNUM FROM PD WHERE PD.DNUM=2)
Пример 37.
P.PNUM IN (1, 2, 3, 5)
Предикат like ::= Выражение для вычисления значения строки-поиска [NOT] LIKE Выражение для вычисления значения строки-шаблона [ESCAPE Символ]
Замечание. Предикат LIKE производит поиск строки-поиска в строке-шаблоне. В строке-шаблоне разрешается использовать два трафаретных символа:
Символ подчеркивания "_" может использоваться вместо любого единичного символа в строке-поиска,
Символ процента "%" может заменять набор любых символов в строке-поиска (число символов в наборе может быть от 0 и более).
Предикат null ::= Конструктор значений строки IS [NOT] NULL
Замечание. Предикат NULL применяется специально для проверки, не равно ли проверяемое выражение null-значению.
Предикат количественного сравнения ::= Конструктор значений строки {= | < | > | <= | >= | <>} {ANY | SOME | ALL} (Select-выражение)
Замечание. Кванторы ANY и SOME являются синонимами и полностью взаимозаменяемы.
Замечание. Если указан один из кванторов ANY и SOME, то предикат количественного сравнения возвращает TRUE, если сравниваемое значение совпадает хотя бы с одним значением, возвращаемом в подзапросе (select-выражении).
Замечание. Если указан квантор ALL, то предикат количественного сравнения возвращает TRUE, если сравниваемое значение совпадает с каждым значением, возвращаемом в подзапросе (select-выражении).
Пример 38.
P.PNUM = SOME (SELECT PD.PNUM FROM PD WHERE PD.DNUM=2)
Предикат exist ::= EXIST (Select-выражение)
Замечание. Предикат EXIST возвращает значение TRUE, если результат подзапроса (select-выражения) не пуст.
Предикат unique ::= UNIQUE (Select-выражение)
Замечание. Предикат UNIQUE возвращает TRUE, если в результате подзапроса (select-выражения) нет совпадающих строк.
Предикат match ::= Конструктор значений строки MATCH [UNIQUE] [PARTIAL | FULL] (Select-выражение)
Замечание. Предикат MATCH проверяет, будет ли значение, определенное в конструкторе строки совпадать со значением любой строки, полученной в результате подзапроса.
Предикат overlaps ::= Конструктор значений строки OVERLAPS Конструктор значений строки
Замечание. Предикат OVERLAPS, является специализированным предикатом, позволяющем определить, будет ли указанный период времени перекрывать другой период времени.