ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 1615
Скачиваний: 25
101
ин
р
дан
им
средства
,
с
помощью
которых
в
СУБД
обес
д
сть
сущностей
(
потенциальные
ключи
отношений
)
и
ссылочную
целостность
(
целостность
внешних
ключей
).
Декларативные
ограничения
целостности
можно
использовать
как
при
создании
таблиц
-
отношений
средствами
языка
та
аблиц
.
рт
ивной
поддержк
торые
более
подробно
рассматриваются
ниже
.
Процедурная
поддержка
ограничений
целостности
заключается
в
спользовании
программного
кода
,
реализуемого
в
СУБД
в
виде
так
назы
п
.
формации
о
п едметной
области
,
называемого
ограничениями
целостности
ных
.
В
данном
разделе
рассмотр
печивается
описание
информации
об
ограничениях
целостности
и
реализуется
механизм
выполнения
этих
ограничений
.
В
самом
общем
виде
различают
два
способа
реализации
механизма
обеспечения
целостности
данных
,
это
:
•
декларативная
под ержка
ограничений
целостности
,
•
процедурная
поддержка
ограничений
целостности
.
Декларативная
поддержка
ограничений
целостности
заключается
в
описании
ограничений
целостности
средствами
языка
определения
данных
(DDL - Data Definition Language),
поддерживаемого
СУБД
.
Обычно
средства
декларативной
поддержки
целостности
(
если
они
имеются
в
конкретной
СУБД
)
определяют
ограничения
на
значения
доменов
и
атрибутов
,
целостно
DDL,
к
и
задавать
и
модифицировать
для
уже
существующих
т
Станда ом
языка
SQL
предусмотрен
широкий
набор
средств
декларат
и
ограничений
целостности
,
ко
и
ваемых
хранимых
роцедур
и
триггеров
Хранимые
процедуры
–
это
процедуры
и
функции
(
программный
код
),
хранящиеся
непосредственно
в
базе
данных
в
откомпилированном
виде
и
которые
могут
запускаться
пользователями
или
приложениями
,
работающими
с
базой
данных
.
т
в
том
,
Триггеры
–
это
хранимые
процедуры
,
особенность
которых
состои
что
их
запуск
на
исполнение
связан
с
определенными
событиями
,
происходящими
во
время
работы
базы
данных
.
В
качестве
таких
событий
выступают
операции
вставки
,
обновления
и
удаления
строк
таблиц
.
Если
в
базе
данных
определен
некоторый
триггер
,
то
он
запус
кается
автоматически
и
всегда
при
возникновении
события
,
с
которым
этот
триггер
связан
.
Очень
важным
является
то
,
что
пользователь
не
может
обойти
триггер
.
Триггер
срабатывает
всегда
и
независимо
от
того
,
кто
из
поль
м
инициировал
событие
,
вызвавшее
запуск
триг
зователей
и
каким
способо
гера
.
102
Основн
ри
тическое
выполнение
действий
по
ое
назначение
т ггеров
–
автома
поддер
ст сти
х
.
жанию
цело
но
базы
данны
Три
простыми
,
например
,
оддерж
лостность
,
так
и
довольно
сложными
,
еализующими
какие
-
либо
сложные
ограничения
предметной
области
или
слож
триггеры
пишутся
либо
на
специальном
проц
L (
например
, PL/SQL
для
ORACLE
или
Transact-
на
некотором
универсальном
языке
рограмм
лючением
в
код
операторов
SQL
в
оотв
более
сложно
,
чем
использование
декларативных
средств
языка
SQL,
так
формирования
прог
ии
разработчика
о
с
триггера
.
Если
испо
ограничений
целостности
,
например
сред
ны
два
подхода
.
1.
И
в
ядро
С
ог
г
С
,
в
о
ская
генерация
программного
кода
триггеров
,
выполняющих
н
и
ог
еко
мер
Visual FoxPro,
ггеры
могут
как
достаточно
быть
ивающими
ссылочную
це
п
р
ные
действия
,
которые
должны
произойти
при
наступлении
некоторых
событий
.
Обычно
хранимые
процедуры
и
едур
ии
яз
ном
расширен
ыка
SQ
SQL
для
MS S
)
QL Server ,
или
ирования
,
например
, C++,
с
вк
п
с
етствии
со
специальными
правилами
такого
включения
.
Использование
для
обеспечения
целостности
триггеров
и
хранимых
процедур
как
предполагает
более
низкоуровневые
средства
раммного
кода
и
более
высокие
требования
к
квалификац
базы
данных
.
Однако триггеры
позволяют
реализовать
в
СУБД
бработку
гораздо
более
изощренных
ограничений
целостности
данных
,
не
реализуемых
с
использованием
стандартных
встроенных
средств
декларативной
поддержки
целостности
.
Вообще
говоря
,
наличие
ограничения
целостности
(
как
декларативного
,
так
и
процедурного
характера
)
всегда
приводит
к
созданию
или
использованию
некоторого
программного
кода
,
реализующего
это
ограничение
.
Разница
заключается
в
том
,
где
такой
код
хранится
и
как
он
создается
.
И
в
этом
плане
наличие
,
развитость
и
уровень
реализации
в
конкретной
СУБД
средств
описания
и
обеспечения
целостности
данных
является
одним
из
важных
показателей
ее
уровня
,
с
точки
зрения
возможностей
и
эффективности
реализации
на
ее
основе
информационных
систем
базами
данных
.
При
реализации
в
СУБД
ограничений
целостности
в
виде
триггеров
соответствующий
программный
код
является
просто
телом
льзуется
декларативное
задание
ствами
языка
SQL,
то
возмож
спользование
для
реализации
ограничения
функций
,
встроенных
УБД
,
с
сохранением
емого
при
декларировании
исходного
задава
текста
раничения в
виде некоторо о
объекта
УБД
.
В этом
случае
проверка
ограничения
выполняется
функциями
ядра
СУБД
(
например
,
ядра
Oracle)
со
ссылкой
на
этот
объект
.
Ограничение
целостности
при
этом
нельзя
модифицировать
иначе
,
как
путем
использования
декларативных
операторо
создания
и
м дификации
ограничений
.
2.
Автоматиче
еобходимые
действия
по
проверке
ограничений
,
при
декларировани
раничения
СУБД
.
В
н
торых
СУБД
,
напри
103
допускается
последующее
«
ручное
»
редактирование
автоматически
сгенерированного
кода
триггера
.
Если
система
не
поддерживает
ни
декларативную
поддержку
ссылочной
целостности
,
ни триггеры
(
как
,
например
FoxP o 2.5 Clipper
и
д
.),
то
программный
код
,
следящий
за
корректностью
базы
данных
,
приходится
размещать
в
пользовательском
приложении
.
Это
существенно
затрудняет
разработку
программ
и
,
главное
,
не
защищает
от
возможности
внесения
пользователем
r
,
р
некорректных
данных
напрямую
в
базу
данных
.
Ситуация
особ
у
т
к
т
аративных
ограничений
L
имых
пр
ва
,
однако
,
являются
системно
зависимыми
,
то
зависящими
от
особенностей
конкретной
СУБД
.
В
стандарте
же
языка
реализации
ограничений
целостности
не
пр
тствуют
такие
понятия
,
как
триггер
ил
цедура
.
Однако
,
п
этом
,
в
SQL
имеются
развитые
дек
чений
целостности
.
ст
являются
частью
синтаксиса
ком
.
Чаще
всего
они
используются
с
ком
базы
данных
,
и
кома
ся
мо
тров
существу
команду
,
позволяющую
создать
таблицу
STUDENT
.
енно
сложняе ся
в
случае
,
огда
с
базой
данных
работае
не
одно
,
а
множество
различных
приложений
.
Каждое
из
таких
приложений
должно
содержать
один
и
тот
же
код
,
отвечающий
за
поддержание
целостности
базы
данных
,
который
при
необходимости
изменения
характера
ограничения
целостности
необходимо
модифицировать
синхронно
во
всех
приложениях
.
9.6.
Поддержка
декл
целостности
в
языке
SQ
Практически
во
всех
современных
промышленных
СУБД
имеются
процедурные
средства
ограничений
целостности
с
помощью
хран
оцедур
и
триггеров
.
Эти
средст
есть
SQL
процедурные
средства
едусмотрены
.
В
связи
с
этим
в
SQL
отсу
и
хранимая
про
ри
ларативные
средства
для
определения
ограни
ности
Декларативные
ограничения
цело
анд
определения
данных
(DDL)
языка
SQL
андой
CREATE TABLE
,
предназначенной
для
создания
пустой
таблицы
нды
ALTER TABLE
,
с
помощью
которой
осуществляет
ющей
таблицы
.
дификация
структуры
и
параме
дующий
пример
показывает
Сле
CREATE
TABLE
СТУДЕНТЫ
(
КОД
_
СТУД
INTEGER
,
ФИО
CHAR
(
20
),
ПАСПОРТ
CHAR
(
15
),
104
СТИПЕНДИЯ
NUMERIC
(
4
),
КУРС
INTEGER
,
);
ь
Ы
пред
отдельного
ограничения
целостности
,
задаваемого
командой
ASSEPTION
.
Например
,
следующее
ограничение
CHECK
(
СТУДЕНТЫ
.
КУРС
> 0
AND
СТУДЕНТЫ
.
КУРС
<=6)
ФАКУЛЬТЕТ
CHAR
(
50
),
СТАРОСТ
I
А
NTEGER
Добавит
в
существующую
таблицу
STUDENT
новые
столбцы можно
командой
ALTER
TABLE
STUDENT
ADD
(
ДАТА
_
РОЖД
DATE
,
АДРЕС
CHAR
(
60
));
А
изменить
параметры
уже
существующего
столбца
можно
с
помощью
команды
ALTER
TABLE
СТУДЕНТ
MODIFY
(
ФИО
CHAR
(
60
));
которая
увеличива
20-
ти
символов
,
ет
ширину
столбца
ФИО
с
заданных
ыдущей
командой
CREATE
,
до
60-
ти
символов
.
Как
видно
из
приведенных
SQL-
выражений
,
при
описании
столбцов
таблицы
указывается
тип
данных
,
которые
могут
использоваться
в
качестве
значений
столбцов
.
В
примерах
использованы
типы
данных
:
INTEGER
–
целое
число
,
NUMERIC()
–
число
с
фиксированной
точкой
,
CHAR()
–
строка
символов
,
DATE
–
дата
.
Указание
типа
данных
столбца
уже
является
простейшим
ограничением
,
накладываемым
на
его
значения
(
ограничение
уровня
атрибута
).
Однако
должно
быть
понятно
,
что
указание
типа
данных
столбца
не
эквивалентно
ограничению
на
значения
атрибута
,
задаваемого
его
доменом
.
Синтаксис
SQL
позволяет
задавать
гораздо
более
сложные
ограничения
целостности
данных
.
Это
следующие
виды
ограничений
•
ограничение
типа
,
•
ограничение
столбца
и
•
ограничение
таблицы
.
ие
ю
Ограничен
типа
задается
с
помощь
ключевого
слова
CHECK
.
Ключевое
слова
CHECK
позволяет
указать
предикат
,
задающий
ограничение
целостности
,
который
может
принимать
значения
true, false
и
un-
known
.
Ограничение
типа
может
быть
использовано
как
часть
описания
домена
,
столбца
таблицы
,
самой
таблицы
или
105
сос
зн
бута
таблицы
СТУДЕНТЫ
(
курс
,
на
котор
ент
я
в
диапазоне
от
1
до
6.
Ограничение
целос
сания
данных
языка
SQL
могут
задават
ть
и
(
в
этом
случае
они
будут
распрос
д
задаваться
как
часть
описания
таблиц
уч
й
таблице
).
При
этом
любое
о
граничение
таблицы
,
но
не
наоб
Дл
г
соврем
CONSTRAINT
,
которое
позволяет
присваиват
ое
имя
.
Имя
о
ож
я
параме
ог
б
ошибках
,
возникающих
при
проверке
ограниче
E
}
[
Ссылочная
]}
Ог
{
с
столбца
, ...
)
|
CASCADE
|
SET NULL
|
SET DEFAULT
}]
Напомним
,
что
квадратные
скобки
при
описании
синтаксиса
языка
указывают
на
необязательность
использования
находящегося
внутри
них
тоит
в
том
,
что
ачение
атри
КУРС
ом
учится
студ
)
может
принимать
значени
тности
в
командах
опи
я
ься
как
час
описан
столбца
лбец
)
или
траняться
на
анный
сто
сл
ы
(
в
этом
ае
они
будут
относиться
ко
все
ть
описано
как
о
граничение
столбца
может
бы
орот
.
о
я
задания
раничения
столбца
или
ограничения
таблицы
в
енном
SQL
может
использоваться
н
ое
слово
еобязательное
ключев
ь
ограничению
уникальн
граничения
м
ет
быть
впоследствии
использовано
для
изменени
тров
данного
раничения
или
его
удал
иях
о
ения
,
а
также
в
сообщен
ния
.
Несколько
упрощенный
синтаксис
выражения
для описания
ограничения
столбца
и
ограничения
таблицы
выглядит
следующим
образом
Ограничения
столбца
::=
[
CONSTRAINT
Имя
ограничения
]
{
{
NOT NULL
}
| {
PRIMARY
KEY
}
| {
UNIQU
| {[
FOREIGN
KEY
]
REFERENCES
Имя
таблицы
[(
Имя
столбца
)]
спецификация
| {
Ограничение
check
}
}
раничения
таблицы
::=
[
CONSTRAINT
Имя
ограничения
]
{
PRIMARY KEY
(
Имя
столбца
, ...
)}
| {
UNIQUE
(
Имя
толбца
, ...
)}
| {
FOREIGN KEY
(
Имя
REFERENCES
Имя
таблицы
[(
Имя
столбца
, ...
)]
[
Ссылочная
спецификация
]}
| {
Ограничение
check
}
}
Ссылочная
спецификация
::=
[
ON UPDATE
{
NO
ACTION
|
CASCADE
|
SET NULL
|
SET DEFAULT
}]
[
ON DELETE
{
NO
ACTION