
- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
Ограничение подтипа записывается как условие, зависящее от имени определяемого подтипа, например:
create |
subtype ПочтовыйИндекс |
type |
decimal(6, 0) |
as |
ПочтовыйИндекс > 0 |
В общем случае ограничение подтипа может содержать логические связки not, and, or и быть выражением произвольной сложности. Определенные таким образом подтипы могут использоваться наряду с другими базовыми типами и в программном коде, и при определении типа данных в столбцах таблиц. В визуальной среде разработки базы данных они появляются в списках допустимых типов вместе с другими базовыми типами.
Пользовательский подтип данных может быть удален с помощью оператора
drop subtype имя_подтипа
Пользовательские подтипы данных рекомендуется вводить для подтипов достаточно общего назначения. В противном случае лучше ограничение ввести при объявлении соответствующего атрибута таблицы.
3.2. Первичные и кандидатные ключи
При объявлении схемы базового отношения могут быть заданы объявления нескольких ключей. Ключ схемы базового отношения – это подсхема, состоящая из одного или нескольких атрибутов,
для которых после объявления в схеме базового отношения СУБД будет автоматически поддерживать условие уникальности значений в кортежах отношения. Это означает, что после выполнения операции вставки, обновления или удаления кортежа (обобщающий термин для этих операций – «модификация отношения») условие уникальности не нарушится, поскольку СУБД этого не допустит. (Впрочем, при удалении кортежа условие уникальности нарушиться не может.)
Но как выбрать ключ? Например, в списке учебной группы заведомо уникальными должны быть значения пары атрибутов – номер зачетной книжки и фамилия студента. Однако, если эту пару (№ ЗК, Ф) объявить в качестве ключа, то тогда в список учебной группы окажется возможным ввести два кортежа с одним и тем же № ЗК и разными Ф. То есть окажется, что в группе появились два студента с одним и тем же номером зачетной книжки, чего быть не должно. (Заметим, что обратная ситуация – разные № ЗК и одинаковые Ф – вполне возможна и допустима.) Следовательно, объявляя ключ, следует позаботиться о его неизбыточности. Это означает, что ни для какого строгого подмножества ключа требование уникальности не предъявляется и не должно предъявляться. То есть в рассматриваемом примере ключом следовало бы объявить № ЗК. Требование неизбыточности является семантическим, и проконтролировать его СУБД, естественно, не в состоянии.
Ключ, состоящий из одного атрибута, называется простым. Простым ключом является № ЗК в экзаменационной ведомости по конкретному предмету. Ключ, состоящий из двух или более атрибутов, называется составным. Составным ключом является № корпуса и № аудитории в списке учебных аудиторий.
Суперключом называется надмножество ключа. Суперключ может содержать дополнительные атрибуты, которые не обязательны для уникальной идентификации кортежа в отношении. Суперключ обладает свойством уникальности, но не обязательно обладает свойством неизбыточности. Если суперключ неизбыточен, то он ключ.
При объявлении схемы базового отношения один из ключей может быть объявлен в качестве первичного. Другие ключи называются кандидатными. Различие между первичным и кандидатными
ключами заключается в том, что
1)допустимо объявление не более одного первичного ключа, тогда как кандидатных ключей может быть несколько;
2)атрибуты первичного ключа не могут принимать null-значений, тогда как для кандидатных ключей это ограничение не обязано накладываться (но может).
При выборе первичного ключа следует отдавать предпочтение простым ключам или ключам, составленным из минимального числа атрибутов. Нецелесообразно также использовать ключи с длинными текстовыми значениями, как, например (для блюда) – «Заяц в сметане с картофельными крокетами и салатом из красной капусты». Но как же сослаться на такое блюдо в базе данных ресторана? Просто нужно ввести словарь-справочник c двумя атрибутами, первый из которых – суррогатный ключ типа счетчика, а второй – наименование, объявленное кандидатным ключом.
3.3. Создание базовых отношений
Атрибуты в схеме базового отношения разделяются на базовые (хранимые) и виртуальные (вычисляемые).
Оператор создания базового отношения в записи на псевдокоде включает объявления базовых и виртуальных атрибутов, объявление ограничения кортежа и объявления первичного, кандидатных и внешних ключей:
create table имя_базового_отношения {имя_базового_атрибута
тип_значений_атрибута
[check(ограничение_значений_атрибута)] [null | not null] [default(значение_по_умолчанию)]
},..
[имя_виртуального_атрибута as(формула_вычисления) ]...
[check(ограничение_кортежа)] [primary key(имя_атрибута,..)] [candidate key(имя_атрибута,..)]...
[foreign key(имя_атрибута,..)
references имя_ссылочного_отношения(имя_атрибута,..) [on update {restrict | cascade | set null}]
[on delete {restrict | cascade | set null}] ]...
Примечание. Первичный ключ может быть только один. Кандидатных и внешних ключей может быть много
При объявлении базового атрибута в общем случае задаются его тип, ограничение значений, флажок допустимости null-значений и значение по умолчанию. Тип и ограничение значений атрибута определяют его домен. Ограничение значений атрибута записывается как условие (в общем случае с логическими связками not, and, or), зависящее от имени атрибута, например,
create table ...
Курс integer
check(1 <= Курс and Курс <= 5)
...
Флажок допустимости null-значений разрешает или запрещает появление null-значений в значениях атрибута. Значение по умолчанию используется при вставке кортежа в отношение, если в операторе вставки значение атрибута явно не задано. Значение по умолчанию может быть и null- значением, если только null-значения для атрибута объявлены допустимыми.
Определение виртуального атрибута заключается в задании формулы его вычисления через другие базовые атрибуты, например:
create table ...
ВесКг ...
[ЦенаРуб/Кг] ...
...
СтоимостьРуб as(ВесКг * [ЦенаРуб/Кг])
...
Ограничение кортежа записывается как условие (в общем случае с логическими связками not, and, or), зависящее от имен нескольких базовых атрибутов, например:
create table ...
minВесКг ...
maxВесКг ...
...
check(0 < minВесКг and minВесКг < maxВесКг)
...

Применение ограничения к кортежу сводится к подстановке значений атрибутов кортежа вместо имен атрибутов.
Далее могут быть объявлены первичный, кандидатные и внешние ключи.
Подсхема базового отношения, которой в другом (или том же самом) базовом отношении соответствует первичный или кандидатный ключ, в контексте указанного отношения называется внешним ключом. Внешние ключи представляют механизм ссылок кортежей одних отношений на кортежи других отношений (рис. 3.1).
Рис. 3.1.: Внешние ключи как механизм ссылок
Объявления первичного и кандидатных ключей навязывают схеме базового отношения соответствующие ограничения уникальности. Объявления внешних ключей связаны с навязыванием так называемых ограничений ссылочной целостности (о них позже).