Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информационное обеспечение управляющих систем реального времени

..pdf
Скачиваний:
3
Добавлен:
15.11.2022
Размер:
3.63 Mб
Скачать

длину, обязательность (NULL, NOT NULL), а также пометить, что колонка входит в состав первичного ключа. Типы колонок соответствуюттипамданныхвыбраннойСУБд);

Первичные ключи (Key Constraints). Задаются ограничения на колонки таблицы. Здесь можно задать ограничение на уникальность первичного ключа, ограничение на уникальность альтернативных ключей, а также просто определить индекс. Первичные ключи на экране отображаются красным флажком “PK”;

Внешние ключи. Связывают поле основной таблицы с внешним ключом справочной таблицы для автоматической проверки ссылочной целостности;

Ограничения-проверки (Check Constraints). Задаются выражения-инварианты, которые должны выполняться для всех строк таблицы. Для редактирования свойств связи требуется войтивпунктконтекстногоменю“Open specification”.

В любой схеме БД важнейшую роль играют связи между таблицами, поэтому создадим для нашего примера пары ключей. Между таблицами Tovar и Prodavez существует идентифицирующая связь. Концы связей помечены кардинальностью (1, 0..*), а также названием: Child (tovar – FK Cpr) и Parent (prodavez – PK Cpr) tables.

После определения первичных и внешних ключей в соответствующих таблицах нашего примера образовались связи (поля, помеченные красным флажком “FK”). Там, где внешний ключ вошел в состав первичного ключа (идентифицирующая связь), поле помечено двумя флажками – “PK”, “FK”.

При редактировании спецификации связи в диалоговом окне задаются:

– имя связи;

– тип связи;

– наименования ролей (Parent, Child);

– кардинальность для каждой роли.

121

Объектная модель схемы

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

Для схемы Student мы выполнили генерацию объектной модели. При этом Data Modeler автоматически сопоставил каждой таблице объект, а каждой связи – ассоциацию. Все вновь созданные объекты были помещены в новую папку. Названия объектов и ассоциаций состоят из префикса “OM_”, далее следует название таблицы или ассоциации, из которой он образован. Объекты, соответствующие таблицам, мы вынесли на отдельную диаграмму классов. В результате получилисьизвлеченныетаблицывпапкеStudent.

Редактирование внешнего ключа

Редактирование внешнего ключа производится с помощью опции Edit Foreign Key. Пример реализации отношения один-ко-многим – это связь между Zakaz (заказы) и Tovar (товар).

На рис. 49 представлено установление связи между таблицами. Связь отобразилась во вкладках Relations и в древе схемы.

Рис. 49. Установление связи между таблицами

122

Создание script для выполнения операций с таблицами

Следующей необходимой функцией RationalRose является функция генерации физической схемы БД (Froward Engineering). В Data Modeler она присутствует и вызывает-

ся из контекстного меню подсхемы (рис. 50). В результате генерации схемы получаем скрипт и таблицы.

Скрипт записывается в указанный в диалоговом окне файл. Его можно выполнить непосредственно в Oracle и в программе PL\SQL developer. В результате должны создаться все таблицы и все ключи связи.

Рис. 50. Запрос пароля для генерации схемы в таблицы

2.10. Триггер для DDL/DML операций

Триггер – это хранимая процедура специального типа, запускаемая автоматически, когда выполняется связанная с ним инструкция языка DML или DDL. Триггеры DML вы-

полняются при событиях: INSERT, UPDATE, DELETE.

Триггеры DDL могут запускаться, когда пользователь регистрируется в экземпляре SQL Server.

Триггер – это особая разновидность хранимой процедуры, выполняемая автоматически при возникновении со-

123

бытия на сервере базы данных. Триггеры языка обработки данных выполняются по событиям, вызванным попыткой пользователя изменить данные с помощью языка обработки данных. Событиями DML являются процедуры INSERT, UPDATE или DELETE, применяемые к таблице или представлению. Эти триггеры срабатывают при запуске любого допустимого события независимо от того, влияет ли оно на какие-либо строки таблицы.

Триггеры DDL срабатывают в ответ на ряд событий языка описания данных (DDL). Эти события прежде всего соответствуют инструкциям PL/SQL CREATE, ALTER, DROP и некоторым системным хранимым процедурам, которые выполняют схожие с DDL операции. Триггеры входа могут срабатывать в ответ на событие LOGON, возникающее при установке пользовательских сеансов. Триггеры могут быть созданы непосредственно из инструкций

PL/SQL и переданы экземпляру Oracle SQL Server.

2.11. Определение таблицы. Создание таблиц CREATE TABLE

Оператор определения таблицы имеет следующий синтаксис:

<table definition>::= CREATE TABLE <table name>

(<table element> [{, <table element>}... ])

<table element>::= <column definition>

| <table constraint definition>

Кроме имени таблицы в операторе указывается список элементов таблицы, каждый из которых служит либо для определения столбца, либо для определения ограничения целостности определяемой таблицы. Требуется наличие

124

хотя бы одного определения столбца. Оператор CREATE TABLE определяет так называемую базовую таблицу.

Определение столбца

Оператор определения столбца описывается следующими синтаксическими правилами:

<column definition>::= <column name> <data type> [<default clause>] [<column constraint>... ] <default clause>::=

DEFAULT { <literal> | USER | NULL } <column constraint>::=

NOT NULL [<unique specification>] | <references specification>

| CHECK (<search condition>)

В обязательной части задается имя столбца и его тип данных. Определение столбца может содержать два необязательных раздела: раздел значения столбца по умолчанию и раздел ограничений целостности столбца.

Значение по умолчанию может быть указано в виде литеральной константы с типом, соответствующим типу столбца.

Указание в разделе ограничений целостности NOT NULL означает, что столбец должен быть заполнен. Можно указать проверочное ограничение целостности для всей таблицы "CHECK (C IS NOT NULL)" (где C – имя данного столбца) или DEFAULT NULL. Столбец можно сделать уникальным в спецификации уникальности.

Для того чтобы обозначить столбец как внешний ключ в разделе ограничений целостности по ссылкам данного столбца (<references specification>), нужно указать FOREIGN KEY(C).

Далее можно указать проверочное ограничение столб-

ца в разделе CHECK (<search condition>) [33].

125

2.12. Определение ограничений целостности таблицы

Раздел определения ограничений целостности таблицы обладает следующим синтаксисом:

<table constraint definition>::= <unique constraint definition>

| <referential constraint definition> | <check constraint definition> <unique constraint definition>::=

<unique

specification>

(<unique

column list>)

 

 

<unique specification>::=

 

UNIQUE | PRIMARY KEY

 

<unique column list>::=

 

<column name> [{, <column name>}... ]

<referential

constraint

definition>::=

 

 

FOREIGN KEY (<referencing columns>) <references specification> <references specification>::= REFERENCES <referenced table and

columns>

<referencing columns>::= <reference column list> <referenced table and columns>::=

<table name> [(<reference column list>)]

<reference column list>::=

<column name> [{, <column name>}... ] <check constraint definition>::= CHECK (<search condition>)

Для одной таблицы может быть задано несколько ограничений целостности [29]. В SQL проверить данные можно двумя способами: с помощью декларативной целостности данных или с помощью процедурной целостности данных.

126

Декларативная целостность данных реализуется с помощью хранимой процедуры, которой предоставляется возможность проверки допустимости данных, либо с помощью создания триггеров, проверяющих данные (INSERT, DELETE и UPDATE). Такаяпроверкасодержитменьшийпрограммный код, чемпроцедурнаяпроверка, ипроставприменении.

Когда определяется таблица в Oracle 8, ограничения целостности могут быть заданы как часть определения таблицы. Ограничения проверяются сервером каждый раз, когда записи вставляются, обновляются или удаляются. Кроме ограничений ссылочной целостности, которые проверяют соответствие первичного и внешнего ключей, можно накладывать ограничения на значения столбцов таблицы.

В SQL Server декларативная целостность реализуется с помощью ограничений. Есть следующие типы ограниче-

ний: PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK и DEFAULT.

Ограничения целостности в Oracle можно задавать на уровнях:

отдельного поля строки в таблице;

отдельной строки;

таблицы.

Ограничение PRIMARY KEY/UNIQUE

Каждое имя столбца в таблице должно быть уникально. Столбец может быть ограничен NOT NULL и PRIMARY KEY. В таблице может быть определен один первичный ключ (PRIMARY KEY). При попытке вставить или обновить запись, которая приводит к нарушению ограничений первичного ключа, внешнего ключа или уникального ключа, генерируется ошибка.

Уникальность значений в столбцах в Oracle

От столбцов, назначенных уникальными, требуется, чтобы значения в их полях всех строк были уникальными.

ALTER TABLE proj ADD UNIQUE (pname);

127

ALTER TABLE proj MODIFY (pname NOT NULL);

Первичные ключи в Oracle

От столбцов, назначенных первичным ключом, требуется, чтобы для всех строк их значения были уникальными. Значения в полях первичного ключа должны существовать всегда.

ALTER TABLE

proj ADD

PRIMARY KEY (

projno, pname );

(первичный ключ

-- создание

ограничения

на основе двух столбцов) с систем-

ным именем

 

ALTER TABLE proj DROP PRIMARY KEY;

-- упразднение ограничения

 

ALTER TABLE proj ADD CONSTRAINT pk_proj PRIMARY KEY ( projno ); -- созда-

ние ограничения с именем, заданным программистом

Ограничения NOT NULL и значения DEFAULT

Сервер автоматически отслеживает попытки ввода «некорректного» значения в столбцы. Например, если в столбец, объявленный как NOT NULL, пытаются ввести пустое значение (NULL) или же пытаются внести слишком большое значение в числовой столбец. При обнаружении таких попыток генерируется исключение (ошибка).

Ограничение NOT NULL на столбец или на группу столбцов гарантирует наличие непустых данных.

ALTER TABLE proj MODIFY ( budget NOT NULL );

-- создание ограничения с системным именем;

ALTER TABLE proj MODIFY ( budget NULL ); -- упразднение ограничения; скобки необя-

зательны

128

ALTER TABLE proj MODIFY ( budget CONSTRAINT is_mandatory NOT NULL ); -- создание ограничения с именем, заданным программистом

В современных версиях Oracle самостоятельное ограничение NOT NULL будет оформлено технически как ограничение вида CHECK с условием для проверки: budget IS NOT NULL и одновременно будет зафиксировано в

USER_CONSTRAINTS значением NULLABLE = 'Y'. Свой-

ство NOT NULL, вытекающее из правила первичного ключа, будет отражено только в USER_CONSTRAINTS.

Ограничение по ссылкам. Внешние ключи

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

Ограничение REFERENCES использует список ссылок столбцов главной таблицы на столбцы из справочной таблицы (referenced table) и проверяет ссылки по значениям и по количеству.

Примеры внешних ключей в Oracle

ALTER TABLE proj ADD ( ldept NUMBER ( 2 ) );

ALTER TABLE proj ADD FOREIGN KEY ( ldept ) REFERENCES dept ( deptno );

2.13. DCL (Data Control Language).

Назначение прав на объекты базы данных

В соответствии с идеологией языка SQL-контроль прав доступа данного пользователя к таблицам БД производится на основе механизма привилегий. Пользователь должен обладать соответствующей привилегией для выполнения какого-либо действия над таблицей. Пользова-

129

тель, создавший таблицу, автоматически становится владельцем всех возможных привилегий на выполнение операций над этой таблицей. В число этих привилегий входит привилегия на передачу всех или некоторых привилегий по отношению к данной таблице другому пользователю, включая привилегию на передачу привилегий. Иногда поддерживается и обратная операция изъятия привилегий от пользователя, ранее их получившего.

Операторы определения доступа к данным (Data Control Language, DCL):

GRANT – предоставляет пользователю (группе) разрешения на определенные операции с объектом;

REVOKE – отзывает ранее выданные разрешения; DENY – задает запрет, имеющий приоритет над раз-

решением.

Оператор определения привилегий обладает следующим синтаксисом:

<privilege definition>::=

GRANT <privileges> ON <table name> TO <grantee> [{, <grantee>}... ] [WITH GRANT OPTION] <privileges>::=

ALL PRIVILEGES

| <action> [{, <action>}... ] <action>::=

SELECT | INSERT | DELETE

| UPDATE [(<grant column list>)]

| REFERENCES [(<grant column list>] <grant column list>::=

<column name> [{, <column name>}... ] <grantee>::=

PUBLIC | <authorization identifier>

[33]

130