- •1.1. Добавление новых записей
- •1.2. Удаление записей
- •1.3. Изменение данных
- •1.4. Проверка ссылочной целостности
- •2. Создание и модификация таблиц
- •2.1. Создание таблиц
- •2.1.1. Ограничения для столбцов
- •2.1.2. Ограничения для таблиц
- •2.1.3. Внешние ключи
- •2.2. Удаление таблиц
- •2.3. Модификация таблиц
- •Список контрольных вопросов:
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 также обладает средствами создания таблиц базы данных, т. е. тех таблиц, которые сохраняются в составе базы данных в долговременной памяти компьютера, например, на жестком диске. Таблицы, возвращаемые запросами на выборку данных, являются виртуальными и доступны только тому, кто инициировал эти запросы.
