
- •Серверы баз данных Курс лекций
- •Предисловие
- •Серверы баз данных. Основные понятия
- •История развития субд
- •Перспективы развития субд
- •Трехуровневая архитектура бд. Ее назначение
- •Пользователи бд
- •Разработчики и администраторы приложений.
- •Контрольные вопросы
- •Модели клиент- сервер в технологии бд
- •Двухуровневые модели
- •Модель удаленного доступа к данным
- •Удаленная презентация (Модель сервера бд)
- •Модель распределенной бд
- •Модель сервера приложений
- •Проектирование баз данных
- •Этапы разработки базы данных
- •Критерии оценки качества логической модели данных
- •Алгоритм нормализации (приведение к 3нф)
- •Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Пример разработки er-модели
- •Описание предметной области
- •Описание сущностей и типов связей
- •П ереход к реляционной модели
- •Концептуальные и физические er-модели
- •Контрольные вопросы
- •Языки бд. Язык определения данных
- •Создание бд. Способы создания бд
- •Создание таблиц базы данных
- •Декларативные ограничения при создании таблиц
- •Задание ограничений ссылочной целостности
- •Изменение таблиц
- •Создание индексов в системе sql-сервер
- •Кластеризованный индекс
- •Контрольные вопросы
- •Языки бд. Язык управления данными
- •Выборка данных
- •Сортировка результатов запроса
- •Вложение запросов
- •Создание таблицы из набора результатов
- •Использование оператора union
- •Запросы на модификацию данных
- •Запросы на удаление
- •Запросы на добавление
- •Вставка записей из другой таблицы
- •Добавление данных в указанные поля
- •Values(‘31.03.03’,’согласен’,3000,4)
- •Запросы на обновление
- •Контрольные вопросы
- •Создание представлений
- •Создание, удаление и обновление представлений
- •Модифицируемые и немодифицируемые представления
- •Контрольные вопросы
- •Хранимые процедуры
- •Элементы Transact sql
- •Оператор условия
- •Циклическое выполнение операций
- •Функции
- •Создание хранимых процедур
- •Выполнение хранимой процедуры.
- •Контрольные вопросы
- •Триггеры
- •Назначение триггеров
- •Создание триггеров
- •Принцип работы триггеров
- •Включение и отключение триггера. Удаление триггера, Просмотр информации о триггерах
- •Контрольные вопросы
- •Транзакции и блокировки
- •Понятие транзакции
- •Свойства транзакций. Способы завершения транзакций
- •Операторы Transact sql для работы с транзакциями
- •Журнал транзакций.
- •Блокировки.
- •Сериалиация транзакций
- •Переопределение блокировок на уровне запроса. Типы блокировок
- •Контрольные вопросы
- •Безопасность данных и привилегии
- •Принципы защиты баз данных от несанкционированного доступа
- •Защита данных в системе ms sql Server
- •Контрольные вопросы
- •Организация доступа к бд из прикладных программ
- •Понятие курсора
- •Интерфейс прикладного программирования
- •Архитектура odbc
- •Архитектура odbc
- •Контрольные вопросы
- •Файловые структуры, используемые для хранения информации в бд.
- •Файлы прямого и последовательного доступа
- •Индексные файлы
- •Файлы с плотным индексом
- •Файлы с неплотным индексом
- •Моделирование отношений 1:м на файловых структурах
- •Моделирование отношений 1:м с использованием однонаправленных указателей
- •Структура записи подчиненного файла.
- •Алгоритм удаление записи из цепочки подчиненного файла.
- •Инвертированные списки
- •К Рисунок 14 онтрольные вопросы
- •Литература
- •Содержание
Задание ограничений ссылочной целостности
При описании таблиц задаются ограничения, обеспечивающие ссылочную целостность данных с помощью средств задания внешних ключей и NULL-ограничений. Например, таблица USP (см. Error: Reference source not found) подчинена двум другим таблицам: PREDM и STUDENTS. При этом таблица USP связана с таблицей STUDENTS обязательной связью, так как в ней должны быть отражены данные обо всех студентах. Каждому значению атрибута NOM_ZACH в таблице USP должно соответствовать ровно одно значение этого же атрибута в таблице STUDENTS. В таблице USP не может быть значений атрибута NOM_ZACH, которых нет в таблице STUDENTS. В то же время кто-либо из студентов мог не сдавать один или несколько экзаменов, поэтому связь с таблицей PREDM будет не обязательной. Для моделирования этих связей должны быть определены два внешних ключа (FOREIGN KEY) для полей NOM_ZACH и PKOD. Для поля NOM_ZACH должно быть задано значение NOT NULL.
Ключ FOREIGN KEY ограничивает значения, которые можно ввести в БД так, чтобы заставить внешний и родительский ключи соответствовать принципу ссылочной целостности. Одно из действий этого ограничения – отбрасывать такие значения для полей, ограниченных как внешний ключ, которые отсутствуют в родительском ключе. Синтаксис ограничения FORIGN KEY:
FOREIGN KEY <список полей> REFERENCES <имя таблицы, содержащей родительский ключ >[список полей родительского ключа].
Создадим таблицу USP с полем NOM_ZACH, определенном в качестве внешнего ключа, ссылающегося на таблицу STUDENTS.
CREATE TABLE USP
(NOM_ZACH INTEGER NOT NULL,
PKOD INTEGER,
TNUM INTEGER,
UDATE DATE ,
MARK INTEGER,
PRIMARY KEY(NOM_ZACH, PKODL)
FOREIGN KEY (NOM_ZACH) REFERENCES STUDENTS (NOM_ZACH),
FOREIGN KEY (PKOD) REFERENCES PREDM (PKOD));
Используя ограничения FOREIGN KEY, можно не указывать список полей родительского ключа, если родительский ключ имеет ограничение PRIMARY KEY. При этом в случае употребления ключей со многими полями, обязательно выполнение условия, чтобы порядок полей во внешних и первичных ключах совпадал. То есть, возможно, следующее описание таблицы.
CREATE TABLE USP
(NOM_ZACH INTEGER NOT NULL FOREIGN KEY REFERENCES STUDENTS,
PKOD INTEGER FOREIGN KEY REFERENCES PREDM,
TNUM INTEGER,
UDATE DATE ,
MARK INTEGER,
PRIMARY KEY (NOM_ZACH,PKOD));
В соответствии со стандартом, изменение или удаление значений родительского ключа не допускается. Это означает, что нельзя удалить данные о студенте из таблицы STUDENTS до тех пор, пока в таблице USP для него имеется какая-нибудь информация. Однако довольно часто возникают ситуации, когда необходимо удалить информацию о студенте, например, в случае его отчисления. В таких случаях рассматривается возможность каскадирования или ограничения действий.
При необходимости изменить или удалить текущее ссылочное значение родительского ключа существует три возможности:
Запретить изменения.
Сделав изменения в родительском ключе, произвести изменения во внешнем ключе автоматически (каскадное изменение).
Сделать изменение в родительском ключе и установить внешний ключ в NULL значение автоматически.
В пределах этих возможностей выполняются все команды модификации. (При использовании команды INSERT ситуация несколько отличается, так как при ее использовании помещаются новые значения родительского ключа в таблицу).
Итак, изменения в родительском ключе можно разделить на ограниченные (RESTRICTED), каскадируемые (CASCADES) и пустые (NULL) изменения. Рассмотрим примеры: предположим, что есть необходимость в изменении номера зачетной книжки, причем оценки должны сохраниться у этого же студента c новым номером. В этом случае следует указать команду UPDATE c каскадируемыми изменениями. То есть:
CREATE TABLE USP
(NOM_ZACH INTEGER NOT NULL FOREIGN KEY REFERENCES STUDENTS,
PKOD INTEGER FOREIGN KEY REFERENCES PREDM,
TNUM INTEGER,
UDATE DATE ,
MARK INTEGER,
PRIMARY KEY(NOM_ZACH,PKOD),
UPDATE OF STUDENTS CASCADES);
Если данные о студенте удаляются, удаление их должно быть выполнено сначала в главной (STUDENTS), а затем в подчиненной таблице (USP). В этом случае используется ограничение
DELETED OF STUDENTS RESTRICTED
После этого при удалении данных о студенте из таблицы STUDENT команда не будет выполнена до тех пор, пока не будут удалены его данные из таблицы USP.
Для того чтобы при удалении номера зачетки из таблицы STUDENTS его оценки сохранились в таблице USP, а в поле NOM_ZACH таблицы USP, относящемся к данному студенту появились NULL значения, необходимо указать:
CREATE TABLE USP
(NOM_ZACH INTEGER FOREIGN KEY REFERENCES STUDENTS,
PKOD INTEGER FOREIGN KEY REFERENCES PREDM,
TNUM INTEGER,
UDATE DATE ,
MARK INTEGER,
PRIMARY KEY(NOM_ZACH,PKOD),
DELETED OF STUDENTS NULLS);
В этом случае ограничения NOT NULL для поля NOM_ZACH, быть не должно.