Целостность данных
Целостность данных является одним из самых важных требований, предъявляемых к базам данных. Рассмотрим такой пример. База данных sales оптового магазина содержит таблицу customer со списком клиентов и таблицу ordsaiem, в которой размещены данные о клиентах и сделанных ими заказах. Если окажется, что в таблице ordsaiem содержатся коды клиентов, которые отсутствуют в таблице customer, то невозможно определить, кому был отпущен товар по этому заказу. Или еще такой пример. Вы удалили из таблицы клиентов, которые перестали пользоваться услугами вашего магазина, а потом обнаружили, что один из них не возвратил вам кредит. Но вся информация о нем в базе данных отсутствует.
Для определения условий целостности донных в базе данных проекта могут быть использованы установленные между таблицами отношения.
Проверка целостности данных может осуществляться как программными средствами, так и средствами базы данных. Например, при вводе в таблицу ordsaiem нового заказа можно использовать программу, которая будет проверять, имеется ли информация об этом клиенте в таблице customer. В случае отсутствия клиента, в таблицу customer будет добавляться новая запись.
Рис . 4.23. Диалоговое окно Referential Integrity Builder для определения условия целостности данных
Для определения условия целостности данных используется окно построителя условий целостности данных Referential Integrity Builder (Построитель целостности данных) (рис. 4.23), которое содержит перечень всех установленных отношений между таблицами. Для ею открытия выполните одно из следующих действий:
Замечание
Если база данных содержит помеченные на удаление объекты, при открытии окна построителя условий целостности данных Referential Integrity Builder (Построитель целостности данных) Visual FoxPro попросит очистить базу данных. В этом случае в меню Database (База данных) выберите команду Clean Up Database (Очистка базы данных), после чего повторно выполните команду, открывающую окно построителя условий целостности данных.
Таблица описания условий содержит имена родительской и дочерней таблиц, наименования индексов, используемых для связи, а также типы действий, выполняемых при модификации данных: добавлении и удалении записей.
В центре диалогового окна находятся переключатели, предназначенные для указания типа выполняемого действия. В нижней части диалогового окна отображается краткая справка о возможном выборе действий. Кроме того, вы можете выбрать тип действия из раскрывающегося списка непосредственно в полях Update (Изменить), Delete (Удалить) и Insert (Вставить).
Рассмотрим возможные действия программы Visual FoxPro при изменении значения первичного ключа или ключа типа Candidate (Кандидат) в родительской таблице в зависимости от используемой опции (табл. 4.12).
Таблица 4.12. Описание действий Visual FoxPro, в зависимости от выбранной опции, при изменении значения первичного ключа или ключа типа Candidate
Наименование опции | Описание |
Cascade (Каскадное изменение) |
При изменении значений полей первичного ключа или ключа-кандидата в родительской таблице автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице. Например, если это правило применить к отношению между таблицами Customer и Ordsalem, при изменении кода клиента в таблице Customer автоматически будут изменены коды и в таблице Ordsalem |
Restrict (Запрет изменения) | Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяв мую запись. Данное правило также можно применить к отношению между таблицами Customer и Ordsalem, если в создаваемом приложении коды клиента определяются на этапе ввода нового клиента и в дальнейшем не редактируются |
Ignore (Игнорировать) |
Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается |
При удалении записи из родительской таблицы возможны следующие действия программы Visual FoxPro в зависимости от установленной в диалоговом окне Referential Integrity Builder (Построителя целостности данных) опции (табл. 4.13).
Таблица 4.13. Действия Visual FoxPro, в зависимости от выбранной опции, при удалении записи из родительской таблицы
Наименование опции |
Описание |
Cascade (Каскад) |
При удалении записи из родительской таблицы автоматически осуществляется каскадное удаление всех записей из дочерней таблицы, связанных с удаляемой записью |
Restrict (Запрет) |
Не позволяет удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись. При попытке удаления записи возникает ошибка, которую вы можете обработать программно |
Ignore (Игнорировать) | Позволяет удалять записи в родительской таблице независимо от существования связанных записей в дочерней таблице. Очевидно, что целостность данных при этом не поддерживается |
Таблица 4.14. Действия Visual FoxPro, в зависимости от выбранной опции, при добавлении новой записи в родительскую таблицу
Наименование |
Описание |
Restrict (Запрет) |
Не позволяет вводить запись, если значение индексного выражения дочерней таблицы не соответствует одной из записей в родительской таблице |
Ignore (Игнорировать) | При вводе данных в дочернюю таблицу не анализируется значение индексного выражения. Целостность данных при этом не поддерживается |
Определим условия целостности данных для таблиц customer и ordsaiem.
1. Откройте окно конструктора базы данных.
2. Создайте отношение между родительской таблицей customer и дочерней таблицей Ordsaiem.
3. Выделите линию, соединяющую таблицы.
4. Нажмите правую кнопку мыши и выберите команду контекстного меню Edit Referential Integrity (Редактировать целостность данных). На экране откроется диалоговое окно Referential Integrity Builder (Построитель целостности данных).
Рис . 4.24. Диалоговое окно Referential Integrity Builder
5. Предположим, что в процессе эксплуатации нашего приложения колы клиента могут изменяться, поэтому в поле Update (Изменить) установите тип действий Cascade (Каскадное изменение).
6. Для обеспечения целостности данных при удалении записей в таблице Customer в поле Delete (Удалить) установите тип действий Restrict (Запрет изменения).
7. На рис. 4.24 представлен результат описанных действий, которые необходимы для обеспечения целостности данных. Для сохранения выполненных действий нажмите кнопку ОК.