Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
stud.kz_235124086 (1).doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
900.1 Кб
Скачать

2.2 Деректер базасындағы бизнес-әрекеттерді сипаттау

Мәліметтердің тұрастығы дегеніміз - пәндік облысын адекватты көрсететін толық ақпараты бар мәліметтер базасының қасиеті.

Тұртастықтың екі түрі бар:физикалық және логикалық тұтастық. Физикалық тұтастық мәліметтерге физикалық рұқсатын және ол мәліметтердің жоғалмағанын көрсетеді. Ал логикалық тұтастық мәліметтер базасындағы қателіктердің жоқтығын тексереді. Біз мәліметтер базасының логикалық тұтастығын қарастырамыз. Мәліметтер базасының тұтастығын қолдауда тұтастықты тексеру және қателіктерді тапқан жағдайда оларды қалпына келтіру көзделген. Мәліметтер базасының тұтастық күйі -тұтастықты шектеу көмегімен құрылады.Тұтастықты шектеу базаға қатысты емес мәліметтерді енгізуге тыйым салады.

Тұтастығын шектеу арасында екі негізгі шектеу типтерін атап өтуге болады:атрибуттар мәндерін шектеу және құрылымды шектеу.

Атрибуттар мәндерін шектеу. Мысал ретінде атрубуттарда бос және қайталанған мәндерді жазуға болмайды.

Құрылымды шектеулер маңыздар тұтастығы және сілтеу тұтастығы талаптарын анықтайды. Әр маңыз экземплярына тек қана оның бір кортежі сай келеді. Маңыздар тұтастығы талаптары - әр қатынаста кестеге қайталанған жазуларды енгізуге тыйым салатын негізгі кілт болуы қажет. Сілтеме үйлесімділік талаптары ішкі кілт түсінігімен тығыз байланысты.

Ішкі кілттер мәліметтер базасындағы кестелер арасында байланыстар орнату үшін қажет. Бұл жағдайда бір қатынастың атрибуты (еншілес) тап осы қатынастың ішкі кілті деп аталады, егер ол басқа қатынастың (негізгі) негізгі кілті болса. Сілтеме үйлесімдік талаптары: еншілес кестенің әр ішкі кілтіне негізгі кестеде негізгі кілті бар мәні сәйкес келуі керек.

Сілтеме үйлесімдікті қолдау үшін негізгі және ішкі кілттер мәндеріне шектеулер қойылады. Бұл шектеулер негізгі кілттің мәндерін жаңарту немесе өшіру, сонымен қатар ішкі кілттің мәндерін жазу және жаңарту кезінде талаптарды орындауы қажет.

Әр қатынастың ішкі кілтіне оған қатысты негізгі кілттің мәндерінің жаңару және өшірулуі кезінде орындалатын талаптар қойылады. Бұл жағдайда келесі стратегияны таңдауға болады- NO ACTION, CASCADE, SET NULL, SET DEFAULT немесе NO CHECK.

NO ACTION. Негізгі қатынастан жиекті өшіруге тыйым салынады, егер еншілес қатынаста оған сілтеме бір ғана жиек болса.

CASCADE. Негізгі қатынаста өшірілген жиектер автоматты түрде оған қатысты еншілес қатынаста оған сілтеме болған жағдайда өшіріледі.

SET NULL. Негізгі қатынаста жиектер өшірілген жағдайда оған қатысты еншілес қатынаста ішкі кілттің атрибутына бос мән жазылады.

SET DEFAULT. Негізгі қатынаста жиектер өшірілген жағдайда оған қатысты еншілес қатынаста ішкі кілттің атрибутына по умолчанию мәндері жазылады.

NO CHECK. Негізгі қатынаста жиектер өшірілген жағдайда сілтеме тұтастықты сақтау көзделмейді.

Құрылған мәліметтер базасының логикалық моледі физикалық жобалаудың негізгі көзі болып табылады.

2.9-2.10-суретте көрсетілген жалпы логикалық және физикалық моделдерінде мына кестелер арасында байланыс орнатылған:

2.2 кесте Байланыс орнатылған кестелер

Parent (басыңқы маңыз)

Child(бағыныңқы немесе туынды маңыз)

Gruppa

Doljnost

Specialnost

Prepodavatel

Disciplina

Student

Prepodavatel

Baza_uchebni_plan

Vedomost

Soderjanie_uchebni_plan

Байланыс бойынша кестелер арасында келесі сілтеме үйлесімділік шарттары анықталған:

Мұның мағынасы:

Егер Gruppa кестесінен бір жазбаны (топты) өшірсек және атын өзгертсек (Delet:Cascade, Update:Cascade) Gruppa кестесіндегі сол топтағы тіркелген барлық білімгер автоматты түрде өшіріледі, немесе олардың тобының аты жаңа атқа автоматты түрде өзгереді.

Gruppa кестесіндегі I:N шарты Gruppa кестесіне жаңа кез келген жазу енгізуге болатындығын білдіреді, яғни Insert:None жаңа жазба енгізуге ешқандай шарт (шек) жоқ. Бұл шарттар бойынша деректер базасында мынадай триггерлер жазылады:

CREATE TRIGGER tD_gruppa FOR gruppa AFTER DELETE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* DELETE trigger on gruppa */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* gruppa R/6 student ON PARENT DELETE CASCADE */

delete from student

where

/* %JoinFKPK(student,OLD," = "," and") */

student.gruppa = OLD.gruppa;

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_gruppa FOR gruppa AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on gruppa */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* gruppa R/6 student ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.gruppa <> NEW.gruppa) THEN

BEGIN

update student

set

/* %JoinFKPK(student,NEW," = ",",") */

student.gruppa = NEW.gruppa

where

/* %JoinFKPK(student,OLD," = "," and") */

student.gruppa = OLD.gruppa;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Ал туынды Student кестесіндегі D:N (Delete:None) шарты Gruppa кестесіндегі кез келген жазбаны өшіруге мүмкіндік береді, яғни өшіруге ешқандай шарт (шектеу) қойылмайды (триггер жазылмайды). I:R (Insert:Restrict) шарты Student кестесіне жаңа жазба енгізгенде сыртқы кілт (Gruppa) кестесімен байланыста тұрған атрибуттарының мәнін Gruppa кестесіндегі Primary Key-негізгі кілттің (Gruppa) мәнінен іздейді, егер ол жақтан табылмаса бұл жазбаны Student кестесіне енгіздірмейді.

CREATE TRIGGER tD_student FOR student AFTER DELETE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* DELETE trigger on student */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* student R/16 vedomost ON PARENT DELETE CASCADE */

delete from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod;

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tI_student FOR student AFTER INSERT AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* INSERT trigger on student */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* gruppa R/6 student ON CHILD INSERT RESTRICT */

select count(*)

from gruppa

where

/* %JoinFKPK(NEW,gruppa," = "," and") */

NEW.gruppa = gruppa.gruppa into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_student FOR student AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on student */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* student R/16 vedomost ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

update vedomost

set

/* %JoinFKPK(vedomost,NEW," = ",",") */

vedomost.kod = NEW.kod

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* gruppa R/6 student ON CHILD UPDATE RESTRICT */

select count(*)

from gruppa

where

/* %JoinFKPK(NEW,gruppa," = "," and") */

NEW.gruppa = gruppa.gruppa into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Бұл триггерлер әр кестеге бір жазба енгізілгенде өздігінен орындалып тұрады.

Байланыс бойынша кестелер арасында келесі сілтеме үйлесімділік шарттары анықталған:

Мұның мағынасы:

Егер Doljnost кестесінен бір жазбаны (қызметін) өшірсек және атын өзгертсек (Delet:Cascade, Update:Cascade) Doljnost кестесіндегі сол қызметке тіркелген барлық оқытушы автоматты түрде өшіріледі, немесе олардың қызметінің аты жаңа атқа автоматты түрде өзгереді.

Doljnost кестесіндегі I:N шарты Doljnost кестесіне жаңа кез келген жазу енгізуге болатындығын білдіреді, яғни Insert:None жаңа жазба енгізуге ешқандай шарт (шек) жоқ. Бұл шарттар бойынша деректер базасында мынадай триггерлер жазылады:

CREATE TRIGGER tD_Doljnost FOR Doljnost AFTER DELETE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* DELETE trigger on Doljnost */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Doljnost R/23 prepodavatel ON PARENT DELETE CASCADE */

delete from prepodavatel

where

/* %JoinFKPK(prepodavatel,OLD," = "," and") */

prepodavatel.kod = OLD.kod;

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_Doljnost FOR Doljnost AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on Doljnost */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Doljnost R/23 prepodavatel ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

update prepodavatel

set

/* %JoinFKPK(prepodavatel,NEW," = ",",") */

prepodavatel.kod = NEW.kod

where

/* %JoinFKPK(prepodavatel,OLD," = "," and") */

prepodavatel.kod = OLD.kod;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Ал туынды Prepod кестесіндегі D:N (Delete:None) шарты Prepod кестесіндегі кез келген жазбаны өшіруге мүмкіндік береді, яғни өшіруге ешқандай шарт (шектеу) қойылмайды (триггер жазылмайды). I:R (Insert:Restrict) шарты Prepod кестесіне жаңа жазба енгізгенде сыртқы кілт (Gruppa) кестесімен байланыста тұрған атрибуттарының мәнін Doljnost кестесіндегі Primary Key-негізгі кілттің (Doljnost) мәнінен іздейді, егер ол жақтан табылмаса бұл жазбаны Prepod кестесіне енгіздірмейді.

CREATE TRIGGER tD_prepodavatel FOR prepodavatel AFTER DELETE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* DELETE trigger on prepodavatel */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* prepodavatel R/21 vedomost ON PARENT DELETE CASCADE */

delete from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod and

vedomost.kod = OLD.kod;

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tI_prepodavatel FOR prepodavatel AFTER INSERT AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* INSERT trigger on prepodavatel */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Doljnost R/23 prepodavatel ON CHILD INSERT RESTRICT */

select count(*)

from Doljnost

where

/* %JoinFKPK(NEW,Doljnost," = "," and") */

NEW.kod = Doljnost.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_prepodavatel FOR prepodavatel AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on prepodavatel */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* prepodavatel R/21 vedomost ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod or

OLD.kod <> NEW.kod) THEN

BEGIN

update vedomost

set

/* %JoinFKPK(vedomost,NEW," = ",",") */

vedomost.kod = NEW.kod,

vedomost.kod = NEW.kod

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod and

vedomost.kod = OLD.kod;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Doljnost R/23 prepodavatel ON CHILD UPDATE RESTRICT */

select count(*)

from Doljnost

where

/* %JoinFKPK(NEW,Doljnost," = "," and") */

NEW.kod = Doljnost.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Бұл триггерлер әр кестеге бір жазба енгізілгенде өздігінен орындалып тұрады.

Байланыс бойынша кестелер арасында келесі сілтеме үйлесімділік шарттары анықталған:

Мұның мағынасы:

Егер Specialnost кестесінен бір жазбаны (мамандықты) өшірсек және атын өзгертсек (Delet:Cascade, Update:Cascade) Specialnost кестесіндегі сол қызметке тіркелген барлық мамандық автоматты түрде өшіріледі, немесе олардың мамандықтың аты жаңа атқа автоматты түрде өзгереді.

Specialnost кестесіндегі I:N шарты Specialnost кестесіне жаңа кез келген жазу енгізуге болатындығын білдіреді, яғни Insert:None жаңа жазба енгізуге ешқандай шарт (шек) жоқ. Бұл шарттар бойынша деректер базасында мынадай триггерлер жазылады:

CREATE TRIGGER tD_specialnost FOR specialnost AFTER DELETE AS

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* DELETE trigger on specialnost */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* specialnost R/17 baza_uchebni_plan ON PARENT DELETE CASCADE */

delete from baza_uchebni_plan

where

/* %JoinFKPK(baza_uchebni_plan,OLD," = "," and") */

baza_uchebni_plan.kod = OLD.kod;

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* specialnost R/14 vedomost ON PARENT DELETE RESTRICT */

select count(*)

from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod into numrows;

IF (numrows > 0) THEN

BEGIN

EXCEPTION ERWIN_PARENT_DELETE_RESTRICT;

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

END !!

CREATE TRIGGER tU_specialnost FOR specialnost AFTER UPDATE AS

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* UPDATE trigger on specialnost */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* specialnost R/17 baza_uchebni_plan ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

update baza_uchebni_plan

set

/* %JoinFKPK(baza_uchebni_plan,NEW," = ",",") */

baza_uchebni_plan.kod = NEW.kod

where

/* %JoinFKPK(baza_uchebni_plan,OLD," = "," and") */

baza_uchebni_plan.kod = OLD.kod;

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* specialnost R/14 vedomost ON PARENT UPDATE RESTRICT */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

select count(*)

from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod into numrows;

IF (numrows > 0) THEN

BEGIN

EXCEPTION ERWIN_PARENT_UPDATE_RESTRICT;

END

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

END !!

Ал туынды baza uchebni plan кестесіндегі D:N (Delete:None) шарты baza uchebni plan кестесіндегі кез келген жазбаны өшіруге мүмкіндік береді, яғни өшіруге ешқандай шарт (шектеу) қойылмайды (триггер жазылмайды). I:R (Insert:Restrict) шарты baza uchebni plan кестесіне жаңа жазба енгізгенде сыртқы кілт (Gruppa) кестесімен байланыста тұрған атрибуттарының мәнін Specialnost кестесіндегі Primary Key-негізгі кілттің (Specialnost) мәнінен іздейді, егер ол жақтан табылмаса бұл жазбаны baza uchebni plan кестесіне енгіздірмейді.

CREATE TRIGGER tD_baza_uchebni_plan FOR baza_uchebni_plan AFTER DELETE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* DELETE trigger on baza_uchebni_plan */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* baza_uchebni_plan R/19 soderjanie_uchebni_plan ON PARENT DELETE CASCADE */

delete from soderjanie_uchebni_plan

where

/* %JoinFKPK(soderjanie_uchebni_plan,OLD," = "," and") */

soderjanie_uchebni_plan.kod_up = OLD.kod_up;

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tI_baza_uchebni_plan FOR baza_uchebni_plan AFTER INSERT AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* INSERT trigger on baza_uchebni_plan */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* specialnost R/17 baza_uchebni_plan ON CHILD INSERT RESTRICT */

select count(*)

from specialnost

where

/* %JoinFKPK(NEW,specialnost," = "," and") */

NEW.kod = specialnost.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_baza_uchebni_plan FOR baza_uchebni_plan AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on baza_uchebni_plan */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* baza_uchebni_plan R/19 soderjanie_uchebni_plan ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod_up <> NEW.kod_up) THEN

BEGIN

update soderjanie_uchebni_plan

set

/* %JoinFKPK(soderjanie_uchebni_plan,NEW," = ",",") */

soderjanie_uchebni_plan.kod_up = NEW.kod_up

where

/* %JoinFKPK(soderjanie_uchebni_plan,OLD," = "," and") */

soderjanie_uchebni_plan.kod_up = OLD.kod_up;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* specialnost R/17 baza_uchebni_plan ON CHILD UPDATE RESTRICT */

select count(*)

from specialnost

where

/* %JoinFKPK(NEW,specialnost," = "," and") */

NEW.kod = specialnost.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Бұл триггерлер әр кестеге бір жазба енгізілгенде өздігінен орындалып тұрады.

Байланыс бойынша кестелер арасында келесі сілтеме үйлесімділік шарттары анықталған:

Мұның мағынасы:

Егер Prepodavatel кестесінен бір жазбаны (оқытушыны) өшірсек және атын өзгертсек (Delet:Cascade, Update:Cascade) Prepodavatel кестесіндегі сол қызметке тіркелген барлық оқытушы автоматты түрде өшіріледі, немесе олардың оқытушының аты жаңа атқа автоматты түрде өзгереді.

Prepodavatel кестесіндегі I:N шарты Prepodavatel кестесіне жаңа кез келген жазу енгізуге болатындығын білдіреді, яғни Insert:None жаңа жазба енгізуге ешқандай шарт (шек) жоқ. Бұл шарттар бойынша деректер базасында мынадай триггерлер жазылады:

CREATE TRIGGER tD_prepodavatel FOR prepodavatel AFTER DELETE AS

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* DELETE trigger on prepodavatel */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* prepodavatel R/21 vedomost ON PARENT DELETE CASCADE */

delete from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod;

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

END !!

CREATE TRIGGER tU_prepodavatel FOR prepodavatel AFTER UPDATE AS

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* UPDATE trigger on prepodavatel */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* prepodavatel R/21 vedomost ON PARENT UPDATE CASCADE */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

update vedomost

set

/* %JoinFKPK(vedomost,NEW," = ",",") */

vedomost.kod = NEW.kod

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod;

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

END !!

Ал туынды Vedomost кестесіндегі D:N (Delete:None) шарты Vedomost кестесіндегі кез келген жазбаны өшіруге мүмкіндік береді, яғни өшіруге ешқандай шарт (шектеу) қойылмайды (триггер жазылмайды). I:R (Insert:Restrict) шарты Vedomost кестесіне жаңа жазба енгізгенде сыртқы кілт (Prepodavatel) кестесімен байланыста тұрған атрибуттарының мәнін Prepodavatel кестесіндегі Primary Key-негізгі кілттің (Prepodavatel) мәнінен іздейді, егер ол жақтан табылмаса бұл жазбаны Vedomost кестесіне енгіздірмейді.

CREATE TRIGGER tI_vedomost FOR vedomost AFTER INSERT AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* INSERT trigger on vedomost */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* prepodavatel R/21 vedomost ON CHILD INSERT RESTRICT */

select count(*)

from prepodavatel

where

/* %JoinFKPK(NEW,prepodavatel," = "," and") */

NEW.kod = prepodavatel.kod and

NEW.kod = prepodavatel.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* student R/16 vedomost ON CHILD INSERT RESTRICT */

select count(*)

from student

where

/* %JoinFKPK(NEW,student," = "," and") */

NEW.kod = student.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Disciplina R/15 vedomost ON CHILD INSERT RESTRICT */

select count(*)

from Disciplina

where

/* %JoinFKPK(NEW,Disciplina," = "," and") */

NEW.kod = Disciplina.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* specialnost R/14 vedomost ON CHILD INSERT RESTRICT */

select count(*)

from specialnost

where

/* %JoinFKPK(NEW,specialnost," = "," and") */

NEW.kod = specialnost.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_vedomost FOR vedomost AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on vedomost */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* prepodavatel R/21 vedomost ON CHILD UPDATE RESTRICT */

select count(*)

from prepodavatel

where

/* %JoinFKPK(NEW,prepodavatel," = "," and") */

NEW.kod = prepodavatel.kod and

NEW.kod = prepodavatel.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* student R/16 vedomost ON CHILD UPDATE RESTRICT */

select count(*)

from student

where

/* %JoinFKPK(NEW,student," = "," and") */

NEW.kod = student.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Disciplina R/15 vedomost ON CHILD UPDATE RESTRICT */

select count(*)

from Disciplina

where

/* %JoinFKPK(NEW,Disciplina," = "," and") */

NEW.kod = Disciplina.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* specialnost R/14 vedomost ON CHILD UPDATE RESTRICT */

select count(*)

from specialnost

where

/* %JoinFKPK(NEW,specialnost," = "," and") */

NEW.kod = specialnost.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Бұл триггерлер әр кестеге бір жазба енгізілгенде өздігінен орындалып тұрады.

Байланыс бойынша кестелер арасында келесі сілтеме үйлесімділік шарттары анықталған:

Мұның мағынасы:

Егер Disciplina кестесінен бір жазбаны (пәнді) өшірсек және атын өзгертсек (Delet:Cascade, Update:Cascade) Disciplina кестесіндегі сол пәнге тіркелген барлық оқу жоспарының мазмұны автоматты түрде өшіріледі, немесе олардың оқытушының аты жаңа атқа автоматты түрде өзгереді.

Disciplina кестесіндегі I:N шарты Disciplina кестесіне жаңа кез келген жазу енгізуге болатындығын білдіреді, яғни Insert:None жаңа жазба енгізуге ешқандай шарт (шек) жоқ. Бұл шарттар бойынша деректер базасында мынадай триггерлер жазылады:

CREATE TRIGGER tD_Disciplina FOR Disciplina AFTER DELETE AS

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* DELETE trigger on Disciplina */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* Disciplina R/20 soderjanie_uchebni_plan ON PARENT DELETE RESTRICT */

select count(*)

from soderjanie_uchebni_plan

where

/* %JoinFKPK(soderjanie_uchebni_plan,OLD," = "," and") */

soderjanie_uchebni_plan.kod = OLD.kod into numrows;

IF (numrows > 0) THEN

BEGIN

EXCEPTION ERWIN_PARENT_DELETE_RESTRICT;

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* Disciplina R/15 vedomost ON PARENT DELETE RESTRICT */

select count(*)

from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod into numrows;

IF (numrows > 0) THEN

BEGIN

EXCEPTION ERWIN_PARENT_DELETE_RESTRICT;

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

END !!

CREATE TRIGGER tU_Disciplina FOR Disciplina AFTER UPDATE AS

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* UPDATE trigger on Disciplina */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* Disciplina R/20 soderjanie_uchebni_plan ON PARENT UPDATE RESTRICT */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

select count(*)

from soderjanie_uchebni_plan

where

/* %JoinFKPK(soderjanie_uchebni_plan,OLD," = "," and") */

soderjanie_uchebni_plan.kod = OLD.kod into numrows;

IF (numrows > 0) THEN

BEGIN

EXCEPTION ERWIN_PARENT_UPDATE_RESTRICT;

END

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

/* Disciplina R/15 vedomost ON PARENT UPDATE RESTRICT */

IF

/* %JoinPKPK(OLD,NEW," <> "," or ") */

(OLD.kod <> NEW.kod) THEN

BEGIN

select count(*)

from vedomost

where

/* %JoinFKPK(vedomost,OLD," = "," and") */

vedomost.kod = OLD.kod into numrows;

IF (numrows > 0) THEN

BEGIN

EXCEPTION ERWIN_PARENT_UPDATE_RESTRICT;

END

END

/* ERwin Builtin Sat Jun 02 00:17:45 2007 */

END !!

Ал туынды Soderjanie_uchebni_plan кестесіндегі D:N (Delete:None) шарты Soderjanie_uchebni_plan кестесіндегі кез келген жазбаны өшіруге мүмкіндік береді, яғни өшіруге ешқандай шарт (шектеу) қойылмайды (триггер жазылмайды). I:R (Insert:Restrict) шарты Soderjanie_uchebni_plan кестесіне жаңа жазба енгізгенде сыртқы кілт (Disciplina) кестесімен байланыста тұрған атрибуттарының мәнін Disciplina кестесіндегі Primary Key-негізгі кілттің (Disciplina) мәнінен іздейді, егер ол жақтан табылмаса бұл жазбаны Soderjanie_uchebni_plan кестесіне енгіздірмейді.

CREATE TRIGGER tI_soderjanie_uchebni_plan FOR soderjanie_uchebni_plan AFTER INSERT AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* INSERT trigger on soderjanie_uchebni_plan */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Disciplina R/20 soderjanie_uchebni_plan ON CHILD INSERT RESTRICT */

select count(*)

from Disciplina

where

/* %JoinFKPK(NEW,Disciplina," = "," and") */

NEW.kod = Disciplina.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* baza_uchebni_plan R/19 soderjanie_uchebni_plan ON CHILD INSERT RESTRICT */

select count(*)

from baza_uchebni_plan

where

/* %JoinFKPK(NEW,baza_uchebni_plan," = "," and") */

NEW.kod_up = baza_uchebni_plan.kod_up into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

CREATE TRIGGER tU_soderjanie_uchebni_plan FOR soderjanie_uchebni_plan AFTER UPDATE AS

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* UPDATE trigger on soderjanie_uchebni_plan */

DECLARE VARIABLE numrows INTEGER;

BEGIN

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* Disciplina R/20 soderjanie_uchebni_plan ON CHILD UPDATE RESTRICT */

select count(*)

from Disciplina

where

/* %JoinFKPK(NEW,Disciplina," = "," and") */

NEW.kod = Disciplina.kod into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

/* baza_uchebni_plan R/19 soderjanie_uchebni_plan ON CHILD UPDATE RESTRICT */

select count(*)

from baza_uchebni_plan

where

/* %JoinFKPK(NEW,baza_uchebni_plan," = "," and") */

NEW.kod_up = baza_uchebni_plan.kod_up into numrows;

IF (

/* %NotnullFK(NEW," is not null and") */

numrows = 0

) THEN

BEGIN

EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;

END

/* ERwin Builtin Sat Jun 23 20:07:19 2007 */

END !!

Бұл триггерлер әр кестеге бір жазба енгізілгенде өздігінен орындалып тұрады.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]