Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4402.pdf
Скачиваний:
1
Добавлен:
13.11.2022
Размер:
585.72 Кб
Скачать

19

2. Целостность баз данных

Одной из важнейших задач, решаемой СУБД, является поддержание в любой момент времени взаимной непротиворечивости, правильности и точности данных, хранящихся в БД. Этот процесс называется обеспечением целостности базы данных.

Следует различать проблемы обеспечения целостности базы данных и защиты базы данных от несанкционированного доступа (см. п. 6). Поддержание целостности базы данных может интерпретироваться как защита данных от неправильных действий пользователей или некоторых случайных внешних воздействий. В обеих ситуациях нарушения целостности базы данных имеют непреднамеренный характер.

Целостность базы данных может быть нарушена в результате сбоя оборудования; программной ошибки в СУБД, операционной системе или прикладной программе; неправильных действий пользователей. Эти ситуации могут возникать даже в хорошо проверенных и отлаженных системах, несмотря на применяемые системы контроля. Поэтому СУБД должна иметь средства обнаружения таких ситуаций и восстановления правильного состояния базы данных.

Целостность базы данных поддерживается с помощью набора специальных логических правил, накладываемых на данные, называемых ограничениями целостности. Ограничения целостности представляют собой утверждения о допустимых значениях отдельных информационных единиц и связях между ними [ 3 ]. Ограничения целостности хранятся в словаре БД.

Ограничения целостности могут определяться:

спецификой предметной области (возраст сотрудников организации может находиться в диапазоне от 16 до 80 лет);

непосредственно информационными характеристиками (артикул товара должен быть целым числом).

В процессе работы пользователя с базой данных СУБД проверяет, соответствуют ли выполняемые действия установленным ограничениям целостности. Действия, нарушающие целостность базы данных, отменяются, при этом обычно выводится соответствующее информационное сообщение.

Рассмотрим проблемы поддержания целостности баз данных на примере реляционной СУБД. Следует отметить, что приводимые далее рассуждения в общем виде справедливы и для других моделей данных [ 3 ].

20

Ограничения целостности в реляционной модели данных могут относиться к полям, записям, таблицам, связям между таблицами.

Ограничения целостности для полей Большая часть ограничений целостности для полей обеспечивает выполне-

ние требования, приведенного в п. 1.2 – данные в одном поле могут иметь значения только из некоторой совокупности допустимых значений, называемой домéном. Практическая реализация этого требования может осуществляться разными способами:

1.Для поля устанавливается конкретный тип данных: текстовый, числовой,

дата/время, логический и т. д. Это не позволяет вводить, например, в числовое поле текст или даты, в поле с типом данных дата/время – числа.

2.Домен указывается непосредственно – перечислением входящих в него значений или с помощью указания диапазона допустимых значений.

Проиллюстрируем процесс создания рассмотренных ограничений целостности для полей на примере СУБД MS Access. Все они легко задаются при формировании структуры таблицы в режиме Конструктора.

Тип данных создаваемого поля выбирается из предложенного списка доступных типов. При необходимости с помощью свойства поля Размер поля можно уточнить область определения размещаемых в нем данных. Указывается максимальный размер данных, сохраняемых в поле: количество символов для тестовых полей; размеры поля для числовых полей: байт (целое число от 0 до 255), целое (число в диапазоне от минус 32768 до 32768), одинарное с плавающей точкой и т. д.

При непосредственном задании домена необходимые параметры можно указать в свойстве поля Условие на значение. Например, если в структуру торгового предприятия входят три магазина: «Парус», «Волна» и «Лотос», для поля Название магазина некоторой таблицы, в которое вводятся соответствующие значения, целесообразно предусмотреть следующее ограничение целостности:

Условие на значение “Парус” OR “Волна” OR “Лотос”

В результате попытка ввести в поле Название магазина другие значения будет восприниматься как ошибка.

Если известно, что цены товаров должны находиться в диапазоне от 100 до 100 000 рублей, ограничение целостности для поля Цена должно иметь вид:

21

Условие на значение

>= 100 AND <=100000

Частным случаем определения домена можно считать автоматическое (по умолчанию) задание конкретного значения данных в некотором поле (в MS Access свойство поля Значение по умолчанию).

Некоторые нарушения целостности полей таблиц базы данных СУБД контролирует автоматически. Например, в поле, для которого определен тип данных дата/время, невозможно ввести значения 10.15.05 или 35.01.05.

В ситуациях, когда вводимое в некоторое поле значение данных не соответствует установленным для этого поля ограничениям целостности, СУБД Access выводит на экран сообщение «Введенное значение не подходит для данного поля». Пользователь может самостоятельно создать нестандартный текст этого сообщения с помощью свойства поля Сообщение об ошибке.

Для полей таблиц могут поддерживаться и другие ограничения целостности.

1.Контролируется, введены ли данные в поле. Например, в таблице со све-

дениями о сотрудниках предприятия для каждого сотрудника обязательно должны быть данные о его фамилии и инициалах. В MS Access это ограничение целостности создается для конкретного поля с помощью выбора значения Да

свойства Обязательное поле.

2.Контролируется уникальность значений данных в поле. Если поле являет-

ся простым первичным ключом таблицы, проверка уникальности значений данных в этом поле выполняется СУБД автоматически. При наличии в таблице вероятных простых ключей, можно исключить ввод в соответствующие поля повторяющихся значений данных. Для этого в MS Access для этих полей в свой-

стве Индексированное поле устанавливается значение Да (Совпадения не допускаются).

Все рассмотренные ограничения целостности проверяют не только правильность ввода новых данных в поля таблиц, но и контролируют процесс редактирования уже имеющихся в таблицах значений.

Перечисленные ограничения целостности называют статическими, так как они определяют условия, которые должны выполняться для каждого состояния базы данных. СУБД может поддерживать и динамические ограничения целостности, контролирующие возможность перехода от одних значений данных, хранящихся в поле, к другим. Например, если в таблице базы данных хранятся сведения о возрасте и стаже работы сотрудников предприятия, значения данных в этих полях должны только увеличиваться [ 3 ]. При попытках внести в базу дан-

22

ных некорректные изменения, СУБД должна выводить сообщение о допущенной ошибке.

Ограничения целостности для записей В рамках данного вида ограничений может контролироваться согласован-

ность значений данных в разных полях записей. Например, в каждой записи таблицы базы данных магазина хранится информация о конкретном товаре. Количество товаров, проданных магазином за отчетный период (поле Продано), не может превышать количества товаров, имеющихся в магазине на начало периода

(поле Наличие товара).

Для задания этого ограничения целостности в MS Access необходимо вызвать диалоговое окно свойств таблицы и в свойстве Условие на значение ввести необходимые условия:

[Наличие товара] >= [Продано]

Ограничения целостности для таблиц Эти ограничения целостности проверяют согласованность данных в различ-

ных записях одной таблицы.

Например, если в таблице приводятся сведения о товарах и их комплектующих, СУБД должна контролировать, чтобы некоторое изделие не входило в состав самого себя. При учете продаж товара несколькими магазинами торгового предприятия следует проверять, чтобы суммарное количество продаж не превышало общего количества товара, полученного предприятием от поставщиков.

В рамках ограничений целостности данного вида может контролироваться также отсутствие одинаковых записей в таблице (на практике это реализуется с помощью создания простых или составных ключей таблицы).

Ограничения целостности для таблиц в основном реализуются специально созданными для этого программами (процедурами) [ 3 ].

Ограничения целостности для связей между таблицами Ограничения целостности этого типа позволяют обеспечить согласованность

данных в связующих полях (первичном и внешнем ключах) нескольких таблиц. Рассмотрим таблицы Поставщики (табл. 1.1) и Поставки товаров (табл.

1.2). Эти таблицы связаны между собой с помощью ключевых полей Код и Шифр поставщика. Таблица Поставщики является главной таблицей, таблица Поставки товаров – подчиненной. Значения данных в связующих полях полу-

23

чены из одного домена, представляющего в рассматриваемом примере множество положительных целых трехзначных чисел.

Нарушение целостности связи между таблицами возможно при возникновении следующих ситуаций:

1.В главной таблице удаляется запись, для которой существуют связанные записи в подчиненной таблице. Действительно, если в таблице Поставщики

удалить первую запись (код поставщика равен 345), база данных будет находиться в несогласованном состоянии – неизвестно, какая фирма осуществила поставки, представленные первой, четвертой и пятой записями таблицы Поставки товаров (см. табл. 1.2).

Ввод в таблицу Поставщики дополнительной записи не приводит к нарушению целостности базы данных, так как в таблице появятся сведения еще об одном поставщике, информация о поставках товаров которым может быть добавлена в таблицу Поставки товаров после начала этих действий.

2.В главной таблице изменяются значения данных в поле (полях) первичного ключа, если существуют связанные с ними значения в поле (полях) внешнего ключа подчиненной таблицы (например, в таблице Поставщики код поставщика, равный 345, изменяется на значение 725, а такого значения в поле Шифр по-

ставщика таблицы Поставки товаров нет).

3.В поле (полях) внешнего ключа подчиненной таблицы вводятся значения данных, отсутствующие в поле (полях) первичного ключа главной таблицы

(например, в таблицу Поставки товаров нельзя ввести шифр поставщика 750, которого нет в поле Код таблицы Поставщики).

В СУБД MS Access для исключения возможности возникновения перечисленных ситуаций, нарушающих согласованность базы данных, при создании каждой конкретной связи между таблицами в диалоговом окне Связи устанавливается флажок Обеспечение целостности данных. После этого любая попытка выполнить действия, нарушающие целостность связей между таблицами, будет игнорироваться (при этом выводится сообщение об ошибке).

Если возникает необходимость удаления или обновления связанных записей

втаблицах БД при сохранении целостности данных, в диалоговом окне Связи

требуется установить флажки Каскадное обновление связанных полей и Кас-

кадное удаление связанных полей. При установке первого из этих флажков изменения данных в поле (полях) первичного ключа главной таблицы приводят к автоматическому изменению соответствующих значений в связанных полях подчиненных таблиц. Установка второго флажка позволяет автоматически уда-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]