- •Информация и данные
- •Основные понятия систем с базами данных
- •Пользователи информационной системы с БД
- •Требования к информационным системам с базами данных
- •Основные компоненты ИС с базами данных
- •Архитектура систем с базами данных. Понятие модели данных
- •Сущности и их свойства
- •Связи (отношения) между сущностями
- •Виды связей между сущностями
- •Еще о сущностях, их свойствах и связях между ними
- •Модели данных. Ранние подходы к организации баз данных
- •Основные понятия реляционной модели данных
- •Структуры данных реляционной модели. Реляционные отношения
- •Свойства отношений
- •Отсутствие в отношении одинаковых кортежей
- •Кортежи отношения не упорядочены (сверху вниз)
- •Атрибуты отношения не упорядочены (слева направо)
- •Значения всех атрибутов являются атомарными
- •Виды отношений
- •Реляционная база данных
- •Реляционная модель. Операции над данными
- •Реляционная алгебра
- •Пересечение отношений
- •Вычитание отношений
- •Декартово произведение отношений
- •Проекция
- •Выборка (ограничение)
- •Естественное соединение отношений
- •Деление
- •Реляционное исчисление
- •Примеры правильно построенных формул
- •Язык SQL
- •Отличие SQL от процедурных языков программирования
- •Формы и составные части SQL
- •Условия и терминология
- •Простейшие SELECT-запросы
- •Ограничения целостности в реляционной модели
- •Ограничения целостности уровня атрибута
- •Домены отношений
- •Отсутствующая информация или NULL-значения.
- •Ограничения целостности уровня кортежа
- •Ограничения целостности уровня отношения
- •Потенциальные, первичные, альтернативные ключи отношения
- •Потенциальные ключи и NULL-значения
- •Ограничения целостности уровня базы данных
- •Внешние ключи и NULL-значения
- •Правила ссылочной целостности
- •При обновлении кортежа в родительском отношении
- •При удалении кортежа в родительском отношении
- •При вставке кортежа в дочернее отношение
- •При обновлении кортежа в дочернем отношении
- •Средства обеспечения целостности данных в СУБД
- •Поддержка декларативных ограничений целостности в языке SQL
- •Проектирование базы данных
- •Функциональная зависимость
- •Нормализация отношений базы данных
- •Нормальные формы
- •Декомпозиция без потерь и функциональные зависимости
- •Первая и вторая нормальные формы.
- •Третья нормальная форма.
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Итоговая схема процедуры нормализации
- •Структуры хранения данных и методы доступа
- •Хранение отношений и доступ к хранимым данным
- •Индексирование
- •Управление транзакциями и целостность баз данных
- •Транзакции и параллелизм
- •Проблемы, возникающие при параллельном выполнении транзакций
- •Проблема потери результатов обновления
- •Проблемы несовместимого анализа
- •Несовместимый анализ – неповторяемое считывание
- •Несовместимый анализ – фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Конфликты между транзакциями
- •Методы сериализации транзакций
- •Решение проблем параллелизма при помощи блокировок
- •Проблема потери результатов обновления
- •Проблема несовместимого анализа. Неповторяемое считывание
- •Фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Уровни изоляции. Объекты синхронизационных блокировок
- •Предикатные синхронизационные блокировки
- •Метод временных меток
- •Уровни изоляции.
- •Синтаксис операторов SQL, определяющих уровни изоляции
67
кортежей отношения ДИСЦИПЛИНЫ, а переменная MX на множестве кортежей отношения УСПЕВАЕМОСТЬ.
Выражения реляционного исчисления будем записывать в виде t WHERE Ψ(t),
где t – это кортеж или кортежи, которые требуется получить, а Ψ(t) – это логическая формула (так называемая правильно построенная формула – ППФ), описывающая условия, которым должны удовлетворят кортежи t искомого отношения.
Правильно построенную формулу Ψ(x) можно определить следующим образом
Ψ(x)::= предикат
| NOT Ψ(x)
| Ψ(x) AND Ψ(x) | Ψ(x) OR Ψ(x) | Ψ(x) → Ψ(x)
| EXISTS x (Ψ(x)) | FORALL x (Ψ(x))
Здесь вертикальная черта разделяет возможные варианты представления правильно построенных формул.
Кортежные переменные в правильно построенных формулах выражения реляционного исчисления могут находиться в свободном или связанном состояниях.
Переменная называется связанной, если сразу же за ней следует квантор EXISTS или FORALL (в этом случае она называется кванторной переменной) или она находится в пределах квантора и имеет такое же имя, что и применяемая кванторная переменная. В противном случае переменная называется свободной.
Примеры правильно построенных формул
F1 = (SX.ГОРОД = ‘Воронеж’)
F2 = (MX.ОЦЕНКА = 3 OR MX.ОЦЕНКА = 4)
F3 = NOT(DX.ИМЯ = ‘Физика’)
Используемые в этих формулах переменные SX, MX и DX являются свободными.
F4 = EXISTS SX (SX.ИМЯ = ‘Иванов’)
68
Эта формула читается как: «Существует по крайней мере одно значение кортежной переменной SX, определенной на кортежах отношения СТУДЕНТЫ, для которой значение атрибута ИМЯ равно ‘Иванов’».
F5 = FORALL MX (MX.ОЦЕНКА >=2)
Эта формула читается как: «Для всех значений кортежной переменной MX значение атрибута ОЦЕНКА больше или равно 2».
В последних двух формулах F4 и F5 переменные SX и MX находятся в связанном (кванторами) состоянии.
Примеры использования реляционного исчисления кортежей для формулировки запросов.
Также как и в предыдущем разделе при использовании реляционной алгебры для иллюстрации рассматриваются следующие отношения.
СТУДЕНТЫ |
|
|
|
|
ДИСЦИПЛИНЫ |
НАИМЕНОВАНИЕ |
|
КОД_СТУД |
ИМЯ |
ГОРОД |
|
|
КОД_ДИСЦИПЛ |
||
С2 |
Иванов |
Орел |
|
|
Д2 |
Информатика |
|
С5 |
Петрова |
Курск |
|
|
Д6 |
Физика |
|
С4 |
Сидоров |
Москва |
|
|
Д1 |
Математика |
|
С7 |
Кузнецов |
Брянск |
|
|
Д5 |
История |
|
С8 |
Зайцева |
Липецк |
|
|
Д7 |
Английский |
|
С3 |
Павлов |
Воронеж |
|
|
Д4 |
Физкультура |
|
С10 |
Котов |
Орел |
|
|
|
|
|
С15 |
Лукин |
Воронеж |
|
|
|
|
|
С23 |
Белкин |
Воронеж |
|
|
|
|
|
УСПЕВАЕМОСТЬ |
|
|
|
|
|
|
|
КОД_СТУД |
КОД_ДИСЦИПЛ |
ОЦЕНКА |
|
|
|
||
С2 |
Д2 |
|
5 |
|
|
|
|
С4 |
Д2 |
|
4 |
|
|
|
|
С8 |
Д2 |
|
5 |
|
|
|
|
С7 |
Д6 |
|
3 |
|
|
|
|
С7 |
Д1 |
|
4 |
|
|
|
|
С3 |
Д4 |
|
5 |
|
|
|
|
Пример 1
Получить имена студентов проживающих в Воронеже.
RANGE OF SX IS СТУДЕНТЫ
SX.ИМЯ WHERE SX.ГОРОД = ‘Воронеж’
69
Пример 2
Получить имена студентов, сдававших дисциплину Д2.
RANGE OF SX IS СТУДЕНТЫ
RANGE OF MX IS УСПЕВАЕМОСТЬ
SX.ИМЯ WHERE EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД
AND MX.КОД_ДИСЦИПЛ = ‘Д2’)
Пример 3
Получить имена студентов, сдававших физику.
RANGE OF SX IS СТУДЕНТЫ
RANGE OF DX IS ДИСЦИПЛИНЫ
RANGE OF MX IS УСПЕВАЕМОСТЬ
SX.ИМЯ WHERE EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД
AND EXISTS DX(DX.КОД_ДИСЦИПЛ = MX.КОД_ДИСЦИПЛ AND DX.НАИМЕНОВАНИЕ = ‘Физика’)
или другая форма того же запроса
SX.ИМЯ WHERE EXISTS MX (EXISTS DX (SX.КОД_СТУД = MX.КОД_СТУД AND MX.КОД_ДИСЦИПЛ = DX.КОД_ДИСЦИПЛ
AND DX.НАИМЕНОВАНИЕ = ‘Физика’))
Пример 4
Получить имена студентов, которые не сдавали дисциплину Д2.
RANGE OF SX IS СТУДЕНТЫ
RANGE OF MX IS УСПЕВАЕМОСТЬ
SX.ИМЯ WHERE NOT EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД AND MX.КОД_ДИСЦИПЛ= ‘Д2’)
Интересно сравнить этот запрос с запросом из примера 2.
Пример 5
Получить имена студентов, которые сдавали все дисциплины.
RANGE OF SX IS СТУДЕНТЫ
RANGE OF DX IS ДИСЦИПЛИНЫ
RANGE OF MX IS УСПЕВАЕМОСТЬ
SX.ИМЯ WHERE FORALL DX (EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД AND MX.КОД_ДИСЦИПЛ = DX.КОД_ДИСЦИПЛ))
70
7.3.Операции над данными – реляционная алгебра и реляционное исчисление
Вдвух предыдущих разделах были проиллюстрированы две возможности реализации математического аппарата для осуществления операций над данными – реляционная алгебра и реляционное исчисление (в варианте исчисления кортежей).
Как уже говорилось, оба эти подхода являются эквивалентными, т.е. любой запрос, представленный на языке реляционной алгебры может быть выражен средствами реляционного исчисления и наоборот.
Важность реляционной алгебры и реляционного исчисления состоит в том, что на их основе могут строиться практически используемые языки работы с базами данных. При этом сравнение этих языков с языками алгебры и исчисления могут служить мерой оценки выразительной силы языка баз данных.
Язык баз данных называют реляционно полным, если он по своим возможностям, по крайней мере, не уступает реляционной алгебре и реляционному исчислению.
Важно также иметь в виду, что возможность представления одних и тех же запросов с помощью различных эквивалентных форм алгебраических выражений или предложений реляционного исчисления дает возможность реализации в СУБД механизма оптимизации запросов, позволяющего путем тождественных преобразований выражений запросов преобразовать их к форме, обеспечивающей наибольшую эффективность их выполнения. Для разработчика, использующего язык запросов к базам данных SQL, знание, лежащих в основе этого языка, алгебры и исчисления позволяют гораздо глубже понимать механизм выполнения запросов СУБД, осознанно осуществлять выбор такой формы выражения запроса, которая обеспечивает более высокую эффективность их выполнения.