Мегаобучалка Главная | О нас | Обратная связь


COMPUTED BY (выражение)



2016-09-16 328 Обсуждений (0)
COMPUTED BY (выражение) 0.00 из 5.00 0 оценок




Значение таких столбцов не вводится пользователем, а вычисляется автоматически согласно выражению. Тип результирующего значения будет служить типом вычисляемого столбца. Например, таблица Tovar содержит поля Price и Kol_vo, тогда создание и формирование значения столбца Stoim можно записать следующим образом:

 

CREATE TOVAR (

Num_Tov INTEGER,

Price INTEGER NOT NULL,

Kol_vo INTEGER NOT NULL,

Stoim COMPUTED BY (Price*Kol_vo),

PRIMARY KEY (Num_Tov));

 

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

Теперь рассмотрим описание ссылочной целостности таблиц. Внешний ключ строится в дочерней таблице для соединения родительской и дочерних таблиц БД. Формат определения:

 

FOREIGN KEY (список столбцов внешнего ключа)

REFERENCES имя_родительской_таблицы

[список столбцов родительской таблицы]

[ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

[ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

 

Список столбцов внешнего ключа определяет столбцы дочерней таблицы, по которым строится внешний ключ. Список столбцов родительской таблицы необязателен при ссылке на первичный ключ родительской таблицы. Параметры ON DELETE, ON UPDATE определяют способы изменения подчиненных записей дочерней таблицы при удалении или изменении поля связи в записи родительской таблицы. Перечислим эти способы:

· NO ACTION – запрет удаления/изменения родительской записи при наличии подчиненных записей в дочерней таблице;

· CASCADE – для оператора ON DELETE: при удалении записи родительской таблицы происходит удаление подчиненных записей в дочерней таблице; для ON UPDATE: при изменении поля связи в записи родительской таблицы происходит изменение на то же значение поля внешнего ключа у всех подчиненных записей в дочерней таблице;

· SET DEFAULT – в поле внешнего ключа у записей дочерней таблицы заносится значение этого поля по умолчанию, указанное при определении поля (параметр DEFAULT);

· SET NULL – в поле внешнего ключа у записей дочерней таблицы заносится значение NULL.

 

С учетом всего вышесказанное скрипт примет следующий вид (изменения выделены курсивом):

 

/*Создание таблицы Class*/

CREATE TABLE Class (

num_class INTEGER NOT NULL,

nameclass VARCHAR(3) NOT NULL,

kol_pupil INTEGER DEFAULT 0,

PRIMARY KEY (num_class) /* установка первичного ключа */

);

 

/* Создание индекса по ключу для таблицы Class*/

CREATE UNIQUE INDEX XPKClass ON Class

(

num_class

);

 

/*Создание таблицы Pupil*/

CREATE TABLE Pupil (

num_pupil INTEGER NOT NULL,

num_class INTEGER NOT NULL,

FIO_pupil CHAR(20) NOT NULL,

ball NUMERIC(4,2) DEFAULT 0,

PRIMARY KEY (num_pupil),

FOREIGN KEY (num_class)

REFERENCES Class

ON DELETE NO ACTION /*нельзя удалить класс с учениками*/

ON UPDATE CASCADE, /*каскадное изменение */

CHECK (ball between 0 and 5)

);

 

/* Создание индекса по ключу для таблицы Pupil*/

CREATE UNIQUE INDEX XPKPupil ON Pupil

(

num_pupil

);

 

/* Создание индекса по внешнему ключу для таблицы Class*/

CREATE INDEX XIF7Pupil ON Pupil

(

num_class

);

 

/*Создание таблицы Teacher*/

CREATE TABLE Teacher (

num_teacher INTEGER NOT NULL,

FIO_teacher VARCHAR(20) NOT NULL,

PRIMARY KEY (num_teacher)/* установка первичного ключа */

);

 

/* Создание индекса по ключу для таблицы Teacher*/

CREATE UNIQUE INDEX XPKTeacher ON Teacher

(

num_teacher

);

 

/*Создание таблицы Predmet*/

CREATE TABLE Predmet (

num_predmet INTEGER NOT NULL,

namepred VARCHAR(20) NOT NULL,

PRIMARY KEY (num_predmet)/* установка первичного ключа */

);

 

/* Создание индекса по ключу для таблицы Predmet*/

CREATE UNIQUE INDEX XPKPredmet ON Predmet

(

num_predmet

);

 

/*Создание таблицы Teach_Pred*/

CREATE TABLE Teach_pred (

num_teach_pred INTEGER NOT NULL,

num_predmet INTEGER,

num_teacher INTEGER,

nagruzka INTEGER NOT NULL,

PRIMARY KEY (num_teach_pred),/*установка первичного ключа*/

FOREIGN KEY (num_predmet) /*Установка внешнего ключа для*/

REFERENCES Predmet /*связи с таблицей Predmet*/

ON DELETE CASCADE

ON UPDATE CASCADE,

FOREIGN KEY (num_teacher)

REFERENCES Teacher /* – c таблицей Teacher*/

ON DELETE CASCADE /*каскадное удаление */

ON UPDATE CASCADE, /*каскадное изменение */

CHECK (nagruzka between 0 and 22));

 

/* Создание индекса по ключу для таблицы Teach_Pred*/

CREATE UNIQUE INDEX XPKTeach_pred ON Teach_pred

(

num_teach_pred

);

 

/* Создание индекса по внешнему ключу num_teacher для Teach_pred*/

CREATE INDEX XIF8Teach_pred ON Teach_pred

(

num_teacher

);

 

/* Создание индекса по внешнему ключу num_predmet для Teach_pred*/

CREATE INDEX XIF9Teach_pred ON Teach_pred

(

num_predmet

);

 

Таким образом, при удалении записи о предмете или учителе автоматически удаляются записи из таблицы Teach_pred, которая хранит информацию о нагрузке учителя по предмету. Удаление записи о классе потерпит неудачу в случае присутствия в связанной таблице учеников ссылки на удаляемый класс.



2016-09-16 328 Обсуждений (0)
COMPUTED BY (выражение) 0.00 из 5.00 0 оценок









Обсуждение в статье: COMPUTED BY (выражение)

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (328)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)