Определение условий целостности данных
Установленные отношения между таблицами могут быть использованы для задания условий целостности данных. Целостность данных является одним из самых важных требований, предъявляемых к базам данных. В качестве примера нарушения целостности данных предположим, что в таблице заказов Ordsale из базы данных магазина оптовой торговли содержаться коды покупателей, которые отсутствуют в таблице Customer, содержащей список покупателей. В этом случае нельзя определить, кому был отпущен товар.
Проверка целостности данных может осуществляться программными средствами. Например, при добавлении в таблицу Ordsale кода покупателя можно проверить, имеется ли указанный покупатель в таблице Customer. Однако более правильным является определение условия целостности данных на уровне базы данных, так как в этом случае ни одно приложение не может нарушить целостность данных.
Для определения условия целостности данных в окне конструктора базы данных следует выбрать команду контекстного меню Referential Integrity или нажать соответствующую ей кнопку панели инструментов «Database Designer». В результате откроется окно конструктора условий целостности данных «Referential Integrity Builder» (рис. 17), которое содержит перечень всех установленных отношений между таблицами. Таблица описания условий содержит наименования родительской и дочерней таблиц, наименования индексов, используемых для связи, а также типы действий, выполняемых при модификации данных, добавлении и удалении записей.
Рис. 17. Окно диалога «Referential Integrity Builder» для определения условий целостности данных
В верхней части окна диалога отображаются три переключателя, предназначенные для установки типа выполняемого действия. Также можно выбрать тип действия из раскрывающегося списка непосредственно в полях Update, Delete и Insert.
При изменении значения первичного ключа или ключа-кандидата в родительской таблице возможны следующие варианты действий:
Наименование | Описание |
Cascade | При изменении значений полей первичного ключа – кандидата в родительской таблице, автоматически осуществляется каскадное удаление всех соответствующих значений в дочерней таблицы. Например, если это правило применить к отношению между таблицами Customer и Ordsale, при изменении кода покупателя в таблице Customer автоматически будут изменены коды и в таблице Ordsale |
Restrict | Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. Данное правило можно применить к отношению между таблицами Customer и Ordsale, если в созданном приложении коды покупателя определяются на этапе ввода нового покупателя и в дальнейшем не редактируются |
Ignore | Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается |
При удалении записи в родительской таблице возможны следующие варианты действий:
Наименование | Описание |
Cascade | При удалении записи в родительской таблице, автоматически осуществляется каскадное удаление всех записей из дочерней таблицы, связанных с удаляемой записью. |
Restrict | Не позволяет удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись. При попытке удаления записи возникает ошибка, которую вы можете обработать программно. |
Ignore | Позволяет удалить записи в родительской таблице, независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается |
При добавлении новой записи в дочернюю таблицу или редактировании в ней существующей записи возможны следующие варианты действий:
Наименование | Описание |
Restrict | Не позволяет вводить запись, если значение индексного выражения дочерней таблицы не соответствует одной из записей в родительской таблице. |
Ignore | При вводе данных в дочернюю таблицу не анализируется значение индексного выражения. Целостность данных при этом не поддерживается |
После завершения определения условий целостности данных необходимо нажать кнопку ОК. в результате вся введенная информация будет сохранена в словаре базы данных. Теперь независимо от приложений при изменении, добавлении и удалении записей будут выполняться указанные действия, обеспечивающие целостность данных.
Хранимые процедуры
Хранимые процедуры являются неотъемлемой частью базы данных. Использование хранимых процедур
Позволяет часть прикладного обеспечения перенести на сервер (модель распределенного приложения). Процедуры хранятся в словаре базы данных, разделяются между несколькими клиентами и выполняются на том же компьютере, что и SQL-сервер.
Хранимые процедуры создаются в проекте приложения. В окне проекта выбираете вкладку Database,затем Stored Proceduresи нажмите кнопкуNew.На экране откроется окно редактирования хранимых процедур. При этом будут отображены все хранимые процедуры проекта. В этом окне можно ввести текст процедуры: как общий для приложения, так и отдельной, используемой в выражении для триггера. Для удаления ненужной более процедуры используется кнопка Remove.
Таблицу можно открыть:
- в главном окне меню VFP: File½ Open ½ Table или Window ½ Data Session;
- в менеджере проектов на вкладке Database;
- в командном окне, используя оператор USE <имя таблицы>.
Примечания:
1. При открытии таблицы любым способом, создается уникальная рабочая область жестко связанная с открываемой таблицей. Если явно не указано имя рабочей области, оно совпадает с именем открываемой таблицы. Все дальнейшие операции с данными в таблице на самом деле проводятся в рабочей области. Переключение между несколькими рабочими областями, в случае наличия нескольких открытых таблиц осуществляется командой SELECT <имя рабочей области>.
2. Команда USE без указания имени таблицы закрывает таблицу, открытую в текущей рабочей области.
3. Для просмотра данных в таблице, открытой в текущей рабочей области можно использовать команду BROWSE.
Задания
1. Создайте на диске каталог с вашим именем.
2. Создайте проект при помощи мастера с именем Sales. В качестве места хранения укажите свой персональный каталог.
3. В окне конструктора проекта создайте базу данных с именем Sales.
4. Создайте таблицы со следующими структурами:
Таблица Customer (Покупатель) содержит информацию о покупателях.
№ n/n | Наименование | Тип | Описание |
icdCustomer | Integer | Код покупателя | |
cCompany | Character (20) | Предприятие | |
cLastName | Character (16) | Фамилия | |
cFirstName | Character (16) | Имя | |
cSecondName | Character (16) | Отчество | |
cZIP | Character (6) | Почтовый индекс | |
cCountry | Character (20) | Страна | |
cRegion | Character (20) | Область | |
CCity | Character (20) | Город | |
Caddress | Character (60) | Остальная часть адреса | |
YCreditLimit | Currency | Кредит | |
MNotes | Memo | Примечание |
Первичный ключ (icdCustomer).
Таблица PHONCUST, содержащая в себе информацию о телефонах заказчика.
№ поля | Наименование | Тип | Описание |
icdCustomer | Integer | Код покупателя | |
cPhone | Character(10) | Телефон покупателя |
Первичный ключ (icdCustomer, cPhone).
Таблица ORDSALEM, содержащая информацию о дате и менеджере заказа.
№ поля | Наименование | Тип | Описание |
icdOrder | Integer | Номер заказа | |
icdCustomer | Integer | Код покупателя | |
dOrderDate | Date | Дата заказа | |
icdManager | Integer | Код менеджера, продавшего товар |
Первичный ключ (icdOrder).
Таблица MANAGER, включающая информацию о менеджерах.
№ поля | Наименование | Тип | Описание |
icdManager | Integer | Код менеджера | |
cnmManager | Character(40) | Имя менеджера |
Первичный ключ (icdManager).
Таблица ORDSALED, содержащая информацию о товаре и его количестве.
№ поля | Наименование | Тип | Описание |
icdOrder | Integer | Номер заказа | |
icdGoods | Integer | Код товара | |
nOrderQuant | Numeric(10) | Заказанное количество товара | |
mOrderNotes | Memo | Примечание к заказу |
Первичный ключ (icdOrder, icdGoods).
Таблица GOODS, хранящая информацию о товарах.
№ поля | Наименование | Тип | Описание |
icdGoods | Integer | Код товара | |
cnmGoods | Character(60) | Наименование товара | |
cnmGoodsGrp | Character(40) | Группа товара | |
nUnitPrice | Numeric(10.2) | Цена |
Первичный ключ (icdGoods).
5. Для каждой таблицы создайте первичные индексы.
6. Создайте необходимые дополнительные индексы и установите связи между таблицами, как это показано на рис. 18.
Рис. 18 Структура базы данных
Обратите внимание! В приведенной структуре допущена одна логическая ошибка. Вам необходимо найти ее, обосновать ваше утверждение и исправить ошибочную связь.
7. Установите для таблиц обеспечение целостности данных, выбрав для вставки записей значение Ignore.
8. Просмотрите и отметьте изменения, произведенные системой, после установки соблюдения целостности данных, для разных типов действий при обеспечении целостности данных. Что изменилось в базе данных? Что изменилось в таблицах?
9. Выбрав имя таблицы, и используя кнопку BROWSE, просмотрите содержимое таблиц.
10. В режиме просмотра таблицы при помощи комбинации клавиш Ctrl+Y добавьте несколько строк и заполните эти строки данными.
11. Измените, заголовки нескольких полей в первой таблице и просмотрите ее в режиме BROWSE. (При просмотре обратите внимание на то, чтобы в пункте меню View был выбран режим Browse, а не Edit).
12. При помощи комбинации клавиш Ctrl+T пометьте строки в таблице на удаление. Физически удалить эти строки можно при помощи команды меню Table | Remove Deleted Records.
13. Внесите в каждую таблицу необходимые данные, таким образом, чтобы было зарегистрировано не менее 5 заказчиков, каждый из которых сделал не менее 2-х заказов из 4 изделий. Количество менеджеров должно превышать половину количества заказчиков. В справочнике изделий должны быть изделия, не вошедшие ни в один заказ.
14. Укажите для каждого поля в таблицах краткий комментарий.
15. Сохраните свой проект для дальнейшей работы.
16. Закройте проект и выйдите из Visual FoxPro.
Дата добавления: 2015-10-29; просмотров: 1117;