- •1 Қолданбалы құрал қажет ететін тақырыпты зерттеу
- •1.1 Автоматтандыруды қажет ететін мәселелерді анықтау
- •1.2 Деректер базасында қолданылатын ақпараттар мен құжаттарды сипаттау
- •2 Тақырып бойынша деректер базасын жобалау
- •2.1 ERwin-Platinum программасы арқылы деректер базасын жобалау
- •2.2 Деректер базасындағы бизнес-әрекеттерді сипаттау
- •2.3 Interbase серверінде деректер базасын анықтау
- •2.15 Сурет Кесте құрылып болғаннан кейінгі ibConsole терезесі
- •3 Borland delphi ортасында деректер базасын
- •3.1 «Student» объектті облысын анықтау
- •3.2 Сурет Кестелердің байланыс процесі
- •3.2 «Disciplina» объектті облысын анықтау
- •3.3 «Prepodsvatel» объектті облысын анықтау
- •Қорытынды
- •Қолданылған әдебиеттер тізімі
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 !!
Бұл триггерлер әр кестеге бір жазба енгізілгенде өздігінен орындалып тұрады.
