Средства поддержания целостности
Обеспечение целостности базы данных означает выполнение ряда ограничений, соблюдение которых необходимо для поддержания непротиворечивости хранимых данных. Среди ограничений целостности можно выделить ограничения диапазонов значений атрибутов отношений и структурные ограничения на кортежи отношений.
Первый тип ограничений предполагает контроль значений атрибутов отношений.
Структурные отношения фиксируют два требования целостности, которые должны поддерживаться реляционными СУБД: требование целостности сущностей и целостности ссылок. Каждому экземпляру сущности, представленному в отношении, соответствует только один его кортеж. Первое требование состоит в том, что любой кортеж отношения должен быть отличим от любого другого кортежа этого отношения, иными словами, любое отношение должно обладать первичным ключом.
Формулировка второго требования тесно связана с понятием внешнего ключа. Требование целостности по ссылкам состоит в том, что для каждого значения внешнего ключа родительской таблицы должна найтись строка в дочерней таблице с таким же значением первичного ключа.
В Visual Fox Pro поддержка ссылочной целостности выполняется с помощью одноименного Построителя. Чтобы открыть Построитель ссылочной целостности, достаточно выполнить следующее:
- Открыть БД с таблицами, для которых необходимо установить ссылочную целостность;
- В контекстном меню Конструктора БД задать команду Referential Integrity (ссылочная целостность), что и приведет к открытию окна Построитель ссылочной целостности данных.
В окне Построителя перечислены все постоянные связи между таблицами БД Подписка. Информация по каждой связи размещена в отдельной строке. Первые два столбца содержат имена родительских и дочерних таблиц. Следующие три столбца содержат правила поддержания ссылочной целостности в случае редактирования, удаления и добавления записей соответственно. Изначально все правила содержат Ignore, но они определяются для каждой связи и каждой из трех перечисленных операций. Последние два столбца содержат индексы (теги) родительской и дочерней таблиц, по которым осуществляется связь.
В диалоговом окне Построителя ссылочной целостности коррективам могут быть подвергнуты только столбцы с правилами. Задача состоит в том, чтобы для каждой связи определить правила поддержания ссылочной целостности при выполнении каждой из трех возможных операций с данными этих таблиц.
Таблица 15 - Средства поддержания целостности по ссылкам при модификации
Наименование | Описание |
Cascade | При изменении первичного ключа или ключа-кандидата в родительской таблице автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице. |
Restrict | Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. |
Ignore | Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается |
При удалении записи из родительской таблицы возможны следующие варианты действий:
Таблица 16 - Средства поддержания целостности по ссылкам при удалении
Наименование | Описание |
Cascade | При удалении первичного ключа или ключа-кандидата в родительской таблице автоматически осуществляется каскадное удаление всех соответствующих значений в дочерней таблице. |
Restrict | Не позволяет удалять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. При попытке удаления возникает ошибка, которую можно обработать программно. |
Ignore | Позволяет удалять значения полей первичного ключа или ключа-кандидата в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается. |
При добавлении новой записи в дочернюю таблицу или редактировании в ней существующей записи.
Таблица 17 - Средства поддержания целостности по ссылкам при вводе
Наименование | Описание |
Restrict | Не позволяет вводить запись, если значение индексного выражения дочерней таблицы не соответствует одной из записей родительской таблицы. |
Ignore | При вводе данных в дочернюю таблицу не анализируется значение индексного выражения. Целостность данных при этом не поддерживается. |
В данном курсовом проекте ссылочная целостность формировалось следующим образом:
- Изменение значений ключевых полей родительских таблиц. Таблица «сотрудники» является дочерней по отношению к таблицам «должности», «образование», «формы трудового участия» и «темы», а таблица «кафедры» является дочерней по отношению к таблице «факультеты» (рисунок 1). Соответствующие поля являются ключевыми. При необходимости такие изменения нужны в родительских таблицах. В этом случае они синхронно (каскадно) изменяются в дочерних таблицах.
- Удаление записей в родительских таблицах. Запретим удаление записей в родительских таблицах, имеющих в дочерних таблицах записи с совпадающими значениями внешних ключевых полей.
- Изменение (добавление) записей в дочерней таблице. Запретим ввод записей в дочерней таблице, не соответствующих одной из записей в родительской таблице [2].
Рисунок 1 – Таблица «Средства поддержания целостности»
Запросы к базе данных
Выборка информации из базы данных может осуществляться:
- с помощью команды SELECT SQL языка Visual FoxPro, которая является аналогом соответствующей команды SQL;
- с помощью мастера запросов и
- с помощью конструктора запроса.
Команда SELECT имеет множество возможностей (опций). Ее упрощенное представление имеет вид:
SELECT Список выбираемых полей
FROM СписокТаблиц – источник данных [INTO ИмяТаблицы получателя данных]
[WHERE УсловиеВыборки]
[GROUP BY УсловиеГруппировки]
[ORDER BY УсловиеУпорядочивания вводимых данных]
Квадратные скобки указывают на необязательность опции.
Конструктор запроса позволяет:
- выбирать данные из одной или нескольких таблиц, используя сложные критерии;
- устанавливать временные связи между таблицами;
- выбирать поля и записи таблиц с требуемыми данными;
- выполнять вычисления с использованием выбранных данных.
Работа с конструктором запроса сводится к заполнению форм запроса. Результатом запроса всегда является таблица, которая может быть сохранена в массиве или созданной новой таблице, отражена на экране или оформлена в виде отчета. Данные, содержащиеся в результирующей таблице, могут быть представлены в виде графика или гистограммы [7].
Запросы представлены в приложении В.