Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_Изменение данных.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
112 Кб
Скачать
☆

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

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

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

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

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

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

ЗначешеТипаЗаписи row match [unique] [simple | partial | full] (подзапрос);

Здесь в квадратных скобках указаны необязательные ключевые слова, а вертикальной чертой разделены их альтернативные варианты: unique (уникальный), simple (простой), partial (частичный), full (полный). Эти ключевые слова определяют правила обработки значений типа записи с полями, имеющими неопределенные значения.

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

select * from Продажи

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

match (select ИмяКлиента, Товар from Продажи);

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

7