
- •22 Методические указания к лабораторной работе №1 "Проектирование базы данных"
- •Проектирование базы данных введение
- •Порядок выполнения работы
- •Наибольшее распространение для семантического моделирования получила модель "сущность-связь" (Entity-Relationship) 2, или er-модель.
- •Рассмотрим базовые понятия er-модели.
- •Различают следующие виды атрибутов:
- •Реляционная модель данных
- •Ограничения целостности
- •6. Ссылочная целостность
- •Стандартные типы данных
- •Типы данных
- •Создание баз данных и таблиц на sql Для операций над базами данных и таблицами в стандарте sql имеются следующие операторы:
- •Объявление текущей базы данных
- •Домены и пользовательские типы данных
- •Правила преобразования er-модели в реляционную
- •Проектирование доменов
- •Создание автоинкрементных столбцов
- •Нормализация
- •Первая нормальная форма (first normal form) – 1нф
- •Библиографический список
6. Ссылочная целостность
СУБД, поддерживающие целостность ссылок по внешним ключам, автоматически проверяют, чтобы внешний ключ указывал на существующую строку целевой таблицы, и не было внешних ключей, ссылающихся в «никуда». При попытке добавить такую строку в таблицу СУБД блокирует вставку и выдает сообщение об ошибке.
Простой внешний ключ объявляется конструкцией FOREIGNKEYREFERENCES…
CREATE TABLE Leave( -- таблица "Отпуск"
-- табельный номер работника – внешний ключ на таблицу Staff
TabNum INT FOREIGN KEY REFERENCES Staff(TabNum),
StartDate DATE NOT NULL, -- начало отпуска
FinDate DATE); -- окончание отпуска
Составной внешний ключ объявляется через ограничение целостности при создании таблицы CREATETABLEили модификации структуры таблицы командойALTERTABLE.
CREATE TABLE Order( -- таблица "Заказы"
OrderNum INT PRIMARY KEY -- номер заказа
ODate DATE NOT NULL, -- дата заказа
-- столбцы внешнего ключа
ClPastSeria NUMERIC(4,0) NOT NULL, -- серия паспорта клиента
ClPasNumber NUMERIC(6,0) NOT NULL, -- номер паспорта клиента
-- объявление внешнего ключа, ссылающегося на таблицу Clients
CONSTRAINT Order_FK FOREIGN KEY (ClPastSeria,ClPasNumber)
REFERENCES Clients(PastSeria,PasNumber));
По определению внешний ключ должен указывать только на существующую строку целевой таблицы. Возникает вопрос: что делать с ссылающимися строками, если строка целевой таблицы, на которую они указывают, будет удалена?
На этот случай в СУБД предусматривается несколько типов реакций:
1) каскадное удаление(DELETECASCADE) – при удалении целевой строки СУБД автоматически удаляет все ссылающиеся на нее строки подчиненных таблиц6.
2) запрещение удаления(DELETENOACTION) – СУБД запрещает удаление строки, пока на нее есть ссылки. В этом случае нужно сначала удалить все ссылающиеся строки, а затем – целевую строку.
3) установка внешнего ключа в NULL или в значение по умолчанию(DELETESETNULL / DEFAULT) – при удалении целевой строки поле внешнего ключа устанавливается вNULLили значение по умолчанию.
Аналогичные типы реакции предусматриваются при изменении значения первичного ключа целевой таблицы: UPDATECASCADE,UPDATENOACTION,UPDATESETNULL,UPDATESETDEFAULT.
CREATE TABLE Leave( -- таблица "Отпуск"
TabNum INT FOREIGN KEY REFERENCES Staff(TabNum)
ON DELETE CASCADE
ON UPDATE CASCADE,
StartDate DATE NOT NULL,
FinDate DATE);
Внешние ключи могут ссылаться на столбцы UNIQUE.
СУБД MySQL 3.23 внешние ключи позволяет объявлять (в целях совместимости с будущими версиями), но целостность по внешним ключам не поддерживает.
Описанные в п.1–6 ограничения целостности называются декларативными, потому что они объявляются при определении структуры таблиц. Перед каждой операцией вставки, модификации или удаления строк СУБД автоматически проверяет эти ограничения. Если ограничений целостности нарушаются, сервер отменяет операцию и выдает сообщение об ошибке.
Стандартные типы данных
Тип данных определяет формат, в котором хранится значение столбца. Стандарт SQL92 предусматривает набор базовых типов данных. Реальные СУБД, как правило, дополняют этот набор своими, специфическими типами данных с целью повышения функциональности системы. В таблице 1 приведены типы данных, поддерживаемые СУБДMicrosoftSQLServer2000,MySQL 3.23,InterBase6.0.
Таблица 1