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

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ИНСТИТУТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ

Лабораторная работа № 7.

Контрольные ограничения и правила

для поддержки целостности данных.

Выполнили

студенты группы А-13-08

каф. Прикладной Математики

Буренков Сергей

Захаров Антон

Москва, 2011

Задание 1

Создать контрольные ограничения на уровне поля, описанные в лабораторном практикуме, для вашей информационной таблицы в вашей БД.

CREATE TABLE arm1

(

nomer integer CHECK (nomer BETWEEN 1 AND 700000),

fio char (40) NOT NULL CHECK (fio NOT LIKE '%.%' AND fio NOT LIKE '%-%'),

d_rogd char(2) CHECK (d_rogd BETWEEN '01' AND '31'),

m_rogd char(2) CHECK (m_rogd BETWEEN '01' AND '12'),

g_rogd char(2) CHECK (g_rogd BETWEEN '00' AND '99'),

pol char(1) CHECK (pol = 'M' OR pol = 'Ж'),

sem_polog_k char(1) CHECK (sem_polog_k IN('0', '1', '2', '3')),

spec char(6) CHECK (spec BETWEEN '000000' AND '190046'),

kat_obuch_k char(2) CHECK (kat_obuch_k BETWEEN '01' AND '17'),

vuz_k integer CHECK (vuz_k BETWEEN 128955 AND 8199999),

mp char(2) CHECK (mp BETWEEN '01' AND '12'),

gp char(2) CHECK (gp BETWEEN '00' AND '99'),

mo char(2) CHECK (mo BETWEEN '01' AND '12'),

gok char(2) CHECK (gok BETWEEN '00' AND '99')

)

Задание 2

Создать контрольные ограничения на уровне таблицы.

А) Значение поля «Год рождения» меньше значения поля «Год приёма», которое, в свою очередь, меньше значения поля «Год окончания»:

ALTER TABLE arm1

ADD CONSTRAINT a_check CHECK

(

CONVERT(integer, g_rogd) < CONVERT(integer, gp) AND

CONVERT(integer, gp) < CONVERT(integer, gok)

)

Б) Если значение поля «Код категории обучения» равно ‘07’, ‘08’ или ‘09’ (аспирант, аспирант-заочник или ординатура), то первые два символа в значении поля «Специальность» больше ‘00’; в остальных случаях (по всем другим значениям поля «Код категории обучения») первые два символа значения поля «Специальность» равны ‘00’:

ALTER TABLE arm1

ADD CONSTRAINT b_check CHECK

(

(kat_obuch_k NOT IN('07', '08', '09') AND spec LIKE '00%') OR

(kat_obuch_k IN('07', '08', '09') AND spec NOT LIKE '00%')

)

В) Если значение поля «Пол» равно «Ж», то фамилия в поле «Фамилия Имя Отчество» должна заканчиваться на букву «А», иначе, если значение поля «Пол» равно «М», то фамилия в поле «Фамилия Имя Отчество» не должна заканчиваться на букву «А»:

ALTER TABLE arm1

ADD CONSTRAINT c_check CHECK

(

(pol = 'Ж' AND fio LIKE '%А % % %') OR

(pol = 'М' AND fio NOT LIKE '%А % % %')

)

Задание 3

Создать правило для созданной таблицы, описанное в лабораторном практикуме.

Запросы:

CREATE RULE rule1

AS @kat_obuch IN('01', '02', '03', '04', '05', '07', '08', '10', '11', '17')

sp_bindrule 'rule1', 'arm1.[kat_obuch_k]'

Результат: