Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.4.rtf
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
7.36 Mб
Скачать

1.4. Проверка ссылочной целостности

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

Целостность данных может быть нарушена при попытке доба­вить запись в дочернюю таблицу, для которой нет соответст­вующей записи в родительской таблице. Например, в базе дан­ных имеется родительская таблица Клиенты (ИмяКлиента, Имя, Адрес, Телефон) и дочерняя таблица Продажи (ID_заказа, Товар, Цена, Количество, ИмяКлиента). В таблице Клиенты Столбец ИмяКлиента является первичным ключом (имеет уникальные и определенные значения), а в таблице Продажи столбец ИмяКлиента не обязан иметь уникальные значения, поскольку один и тот же клиент может сделать несколько различных покупок. Чтобы эти две таблицы находились в связи, столбец ИмяКлиента в таблице продажи должен быть внешним ключом, ссылающимся на пер­вичный ключ ИмяКлиента в таблице клиенты.

Если вы добавите в таблицу Продажи новую запись, содержащую значение столбца ИмяКлиента, которого еще нет в родительской таблице клиенты, то возникнет аномалия модификации данных. Аналогичная ситуация произойдет, если вы попытаетесь удалить запись из таблицы Клиенты: в дочерней таблице Продажи некото­рые записи могут ссылаться на клиентов, сведения о которых от­сутствуют.

Поэтому вначале следует добавить запись в таблицу Клиенты с соответствующим значением столбца ИмяКлиента, а затем - в продажи или, в случае с удалением, вначале нужно удалить со­ответствующие записи из таблицы Продажи, а затем - из Клиенты.

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

Предикат MATCH имеет следующий синтаксис:

ЗначениеТипаЗаписи ROW MATCH [UNIQUE] [SIMPLE | PARTIAL | FOLL] (подзапрос);

Здесь в квадратных скобках указаны необязательные ключевые слова, а вертикальной чертой разделены их альтернативные ва­рианты: UNIQUE (уникальный), SIMPLE (простой), PARTIAL (частичный), FULL (полный). Эти ключевые слова определяют прави­ла обработки значений типа записи с полями, имеющими неопре­деленные значения.

Допустим, требуется определить, есть ли в таблице продажи запись ('Иванов', 'Компьютер'). Для этого можно выполнить та­кой запрос к базе данных:

SELECT * FROM Продажи

WHERE ('Иванов', 'Компьютер')

MATCH (SELECT ИмяКлиента, Товар FROM Продажи);

Если в таблице Продажи есть запись с указанным именем клиента и товаром, то предикат MATCH вернет значение TRUE.

2. Создание и модификация таблиц

Создание и модификация таблиц базы данных обычно произво­дятся специальными диалоговыми инструментами сред разработ­ки, которые поставляются вместе с СУБД. Хотя при их использо­вании, как правило, не требуется написания программ, эти средства включают в себя языки программирования, с помощью которых можно создавать сложные приложения, ориентирован­ные на работу с базами данных. Примерами являются dBase, Paradox, Delphi, Access и др. Вместе с тем язык SQL также обла­дает средствами создания таблиц базы данных, т. е. тех таблиц, которые сохраняются в составе базы данных в долговременной памяти компьютера, например, на жестком диске. Таблицы, возвращаемые запросами на выборку данных, являются виртуальными и доступны только тому, кто инициировал эти за­просы.