Файл: Управление данными (пособие).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 1615

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

101

ин

р

дан

им

 

средства

с

 

помощью

 

которых

 

в

 

СУБД

 

обес

д

сть

 

сущностей

  (

потенциальные

 

ключи

 

отношений

и

 

ссылочную

 

целостность

 

(

целостность

 

внешних

 

ключей

). 

Декларативные

 

ограничения

 

целостности

 

можно

 

использовать

 

как

 

при

 

создании

 

таблиц

-

отношений

 

средствами

 

языка

 

та

аблиц

рт

ивной

 

поддержк

торые

 

более

 

подробно

 

рассматриваются

 

ниже

.  

Процедурная

 

поддержка

 

ограничений

 

целостности

 

заключается

 

в

 

спользовании

 

программного

 

кода

реализуемого

 

в

 

СУБД

 

в

 

виде

 

так

 

назы

п

.

формации

 

о

 

п едметной

 

области

называемого

 

ограничениями

 

целостности

 

ных

В

 

данном

 

разделе

 

рассмотр

печивается

 

описание

 

информации

 

об

 

ограничениях

 

целостности

 

и

 

реализуется

 

механизм

 

выполнения

 

этих

 

ограничений

В

 

самом

 

общем

 

виде

 

различают

 

два

 

способа

 

реализации

 

механизма

 

обеспечения

 

целостности

 

данных

это

 

декларативная

 

под ержка

 

ограничений

 

целостности

 

процедурная

 

поддержка

 

ограничений

 

целостности

Декларативная

 

поддержка

 

ограничений

 

целостности

 

заключается

 

в

 

описании

 

ограничений

 

целостности

 

средствами

 

языка

 

определения

 

данных

 

(DDL - Data Definition Language), 

поддерживаемого

 

СУБД

Обычно

 

средства

 

декларативной

 

поддержки

 

целостности

 (

если

 

они

 

имеются

 

в

 

конкретной

 

СУБД

определяют

 

ограничения

 

на

 

значения

 

доменов

 

и

 

атрибутов

целостно

DDL, 

к

 

и

 

задавать

 

и

 

модифицировать

 

для

 

уже

 

существующих

 

т

Станда ом

 

языка

 SQL 

предусмотрен

 

широкий

 

набор

 

средств

 

декларат

и

 

ограничений

 

целостности

ко

и

ваемых

 

хранимых

 

роцедур

 

и

 

триггеров

  

Хранимые

 

процедуры

 – 

это

 

процедуры

 

и

 

функции

  (

программный

 

код

), 

хранящиеся

 

непосредственно

 

в

 

базе

 

данных

 

в

 

откомпилированном

 

виде

 

и

 

которые

 

могут

 

запускаться

 

пользователями

 

или

 

приложениями

работающими

 

с

 

базой

 

данных

.  

 

т

 

в

 

том

Триггеры

 

– 

это

 

хранимые

 

процедуры

особенность

 

которых

 

состои

что

 

их

 

запуск

 

на

 

исполнение

 

связан

 

с

 

определенными

 

событиями

происходящими

 

во

 

время

 

работы

 

базы

 

данных

.  

В

 

качестве

 

таких

 

событий

 

выступают

 

операции

 

вставки

обновления

 

и

 

удаления

 

строк

 

таблиц

Если

 

в

 

базе

 

данных

 

определен

 

некоторый

 

триггер

то

 

он

 

запус

 

кается

 

автоматически

 

и

 

всегда

при

 

возникновении

 

события

с

 

которым

 

этот

 

триггер

 

связан

Очень

 

важным

 

является

 

то

что

 

пользователь

 

не

 

может

 

обойти

 

триггер

Триггер

 

срабатывает

 

всегда

 

и

 

независимо

 

от

 

того

кто

 

из

 

поль

м

 

инициировал

 

событие

вызвавшее

 

запуск

 

триг

зователей

 

и

 

каким

 

способо

гера


background image

 

102

 

Основн

ри

тическое

 

выполнение

 

действий

 

по

 

ое

 

назначение

 

т ггеров

 – 

автома

поддер

ст сти

х

.  

жанию

 

цело

но

 

базы

 

данны

Три

 

простыми

например

оддерж

лостность

так

 

и

 

довольно

 

сложными

еализующими

 

какие

-

либо

 

сложные

 

ограничения

 

предметной

 

области

 

или

 

слож

триггеры

 

пишутся

 

либо

 

на

 

специальном

 

проц

L (

например

, PL/SQL 

для

 ORACLE 

или

 

Transact-

 

на

 

некотором

 

универсальном

 

языке

 

рограмм

лючением

 

в

 

код

 

операторов

 SQL 

в

 

оотв

более

 

сложно

чем

 

использование

 

декларативных

 

средств

 

языка

 SQL, 

так

 

 

формирования

 

прог

ии

 

разработчика

 

 

о

с

 

триггера

Если

 

испо

 

ограничений

 

целостности

например

 

сред

ны

 

два

 

подхода

.  

1.

 

И

 

в

 

ядро

 

С
ог

 

 

г

С

 

,

в

о

ская

 

генерация

 

программного

 

кода

 

триггеров

выполняющих

 

н

и

 

ог

еко

мер

 Visual FoxPro, 

ггеры

 

могут

как

 

достаточно

 

быть

 

ивающими

 

ссылочную

 

це

п
р

ные

 

действия

которые

 

должны

 

произойти

 

при

 

наступлении

 

некоторых

 

событий

.  

Обычно

 

хранимые

 

процедуры

 

и

 

едур

ии

 

яз

ном

 

расширен

ыка

 SQ

SQL 

для

 MS S

)

QL Server , 

или

ирования

например

, C++, 

с

 

вк

п
с

етствии

 

со

 

специальными

 

правилами

 

такого

 

включения

.  

Использование

 

для

 

обеспечения

 

целостности

 

триггеров

 

и

 

хранимых

 

процедур

 

как

 

предполагает

 

более

 

низкоуровневые

 

средства

раммного

 

кода

 

и

 

более

 

высокие

 

требования

 

к

 

квалификац

базы

 

данных

Однако триггеры

 

позволяют

 

реализовать

 

в

 

СУБД

 

бработку

 

гораздо

 

более

 

изощренных

 

ограничений

 

целостности

 

данных

не

 

реализуемых

 

с

 

использованием

 

стандартных

 

встроенных

 

средств

 

декларативной

 

поддержки

 

целостности

Вообще

 

говоря

наличие

 

ограничения

 

целостности

  (

как

 

декларативного

так

 

и

 

процедурного

 

характера

всегда

 

приводит

 

к

 

созданию

 

или

 

использованию

 

некоторого

 

программного

 

кода

реализующего

 

это

 

ограничение

Разница

 

заключается

 

в

 

том

где

 

такой

 

код

 

хранится

 

и

 

как

 

он

 

создается

И

 

в

 

этом

 

плане

 

наличие

развитость

 

и

 

уровень

 

реализации

 

в

 

конкретной

 

СУБД

 

средств

 

описания

 

и

 

обеспечения

 

целостности

 

данных

 

является

 

одним

 

из

 

важных

 

показателей

 

ее

 

уровня

с

 

точки

 

зрения

 

возможностей

 

и

 

эффективности

 

реализации

 

на

 

ее

 

основе

 

информационных

 

систем

   

базами

 

данных

При

 

реализации

 

в

 

СУБД

 

ограничений

 

целостности

 

в

 

виде

 

триггеров

 

соответствующий

 

программный

 

код

 

является

 

просто

 

телом

льзуется

 

декларативное

 

задание

ствами

 

языка

 SQL, 

то

 

возмож

спользование

 

для

 

реализации

 

ограничения

 

функций

встроенных

УБД

с

 

сохранением

емого

 

при

 

декларировании

 

исходного

 

задава

 

текста

 

раничения в

 

виде некоторо о

 

объекта

 

УБД

В этом

 

случае

 

проверка

 

ограничения

 

выполняется

 

функциями

 

ядра

 

СУБД

 (

например

ядра

 Oracle) 

со

 

ссылкой

 

на

 

этот

 

объект

Ограничение

 

целостности

 

при

 

этом

   

нельзя

 

модифицировать

 

иначе

как

 

путем

 

использования

 

декларативных

 

операторо

 

создания

 

и

 

м дификации

 

ограничений

2.

 

Автоматиче

еобходимые

 

действия

 

по

 

проверке

 

ограничений

при

 

декларировани

раничения

 

СУБД

В

 

н

торых

 

СУБД

напри


background image

 

103

допускается

 

последующее

  «

ручное

» 

редактирование

 

автоматически

 

сгенерированного

 

кода

 

триггера

Если

 

система

 

не

 

поддерживает

 

ни

 

декларативную

 

поддержку

 

ссылочной

 

целостности

ни триггеры

  (

как

например

 FoxP o 2.5  Clipper

и

 

д

.), 

то

 

программный

 

код

следящий

 

за

 

корректностью

 

базы

 

данных

приходится

 

размещать

 

в

 

пользовательском

 

приложении

Это

 

существенно

 

затрудняет

 

разработку

 

программ

 

и

главное

не

 

защищает

 

от

 

возможности

 

внесения

 

пользователем

 

r

,

 

р

 

некорректных

 

данных

 

напрямую

 

в

 

базу

 

данных

Ситуация

 

особ

у

т

к

т

аративных

 

ограничений

 

 

имых

 

пр

ва

однако

являются

 

системно

 

зависимыми

то

 

зависящими

 

от

 

особенностей

 

конкретной

 

СУБД

В

 

стандарте

 

же

 

языка

 

реализации

 

ограничений

 

целостности

 

не

 

пр

тствуют

 

такие

 

понятия

как

 

триггер

 

ил

цедура

Однако

п

этом

в

 SQL 

имеются

 

развитые

 

дек

чений

 

целостности

ст

являются

 

частью

 

синтаксиса

 

ком

.

Чаще

 

всего

 

они

 

используются

 

с

 

ком

базы

 

данных

и

 

кома

ся

 

мо

тров

 

существу

 

команду

позволяющую

 

создать

 

таблицу

 

STUDENT

енно

 

сложняе ся

 

в

 

случае

огда

 

с

 

базой

 

данных

 

работае

 

не

 

одно

а

 

множество

 

различных

 

приложений

Каждое

 

из

 

таких

 

приложений

 

должно

 

содержать

 

один

 

и

 

тот

 

же

 

код

отвечающий

 

за

 

поддержание

 

целостности

 

базы

 

данных

который

 

при

 

необходимости

 

изменения

 

характера

 

ограничения

 

целостности

 

необходимо

 

модифицировать

 

синхронно

 

во

 

всех

 

приложениях

9.6. 

Поддержка

 

декл

целостности

 

в

 

языке

 SQ

Практически

 

во

 

всех

 

современных

 

промышленных

 

СУБД

 

имеются

 

процедурные

 

средства

 

ограничений

 

целостности

 

с

 

помощью

 

хран

оцедур

 

и

 

триггеров

Эти

 

средст

есть

 

SQL 

процедурные

 

средства

 

едусмотрены

В

 

связи

 

с

 

этим

 

в

 SQL 

отсу

и

 

хранимая

 

про

ри

 

ларативные

 

средства

 

для

 

определения

 

ограни

ности

 

Декларативные

 

ограничения

 

цело

анд

 

определения

 

данных

 (DDL) 

языка

 SQL

андой

 

CREATE TABLE

предназначенной

 

для

 

создания

 

пустой

 

таблицы

 

нды

 

ALTER TABLE

с

 

помощью

 

которой

 

осуществляет

ющей

 

таблицы

.  

дификация

 

структуры

 

и

 

параме

дующий

 

пример

 

показывает

Сле

CREATE

 

TABLE

 

СТУДЕНТЫ

 

КОД

_

СТУД

 

INTEGER

,

 

 

ФИО

   

CHAR

(

20

), 

 

ПАСПОРТ

 

 

CHAR

(

15

), 


background image

 

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

Ограничение

 

типа

 

может

 

быть

 

использовано

 

как

 

часть

 

описания

 

домена

столбца

 

таблицы

самой

 

таблицы

 

или

 


background image

 

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