Òðèããåðû â ðåëÿöèîííûõ áàçàõ äàííûõ. |
Çàäà÷è, ðåøàåìûå ïðè ïîìîùè òðèããåðîâ. ßçûêè, èñïîëüçóåìûå ïðè ñîçäàíèè òðèããåðîâ.
Òðèããåðû (trigger) ÿâëÿþòñÿ îñîáîé ðàçíîâèäíîñòüþ õðàíèìûõ ïðîöåäóð, âûïîëíÿåìûõ àâòîìàòè÷åñêè (ñðàáàòûâàþùèõ) ïðè ìîäèôèêàöèè äàííûõ òàáëèöû. Òðèããåðû íàõîäÿò ðàçíîå ïðèìåíåíèå — îò ïðîâåðêè äàííûõ äî îáåñïå÷åíèÿ ñëîæíûõ äåëîâûõ ïðàâèë. Îñîáåííî ïîëåçíûì ñâîéñòâîì òðèããåðîâ ÿâëÿåòñÿ òî, ÷òî îíè èìåþò äîñòóï ê îáðàçàì çàïèñè äî è ïîñëå ìîäèôèêàöèè; òàêèì îáðàçîì âû ìîæåòå ñðàâíèòü äâå çàïèñè è ïðèíÿòü ñîîòâåòñòâóþùåå ðåøåíèå.
Èñïîëüçîâàíèå òðèããåðîâ Òðèããåðû èñïîëüçóþòñÿ äëÿ ðàçëè÷íûõ öåëåé, â òîì ÷èñëå: Îáåñïå÷åíèÿ ññûëî÷íîé öåëîñòíîñòè. Òðèããåðû èñïîëüçóþòñÿ äëÿ ïîääåðæàíèÿ ññûëî÷íîé öåëîñòíîñòè, êîãäà åå êðèòåðèè ñëèøêîì ñëîæíû äëÿ îïðåäåëåíèÿ íà óðîâíå òàáëèö.  ÷àñòíîñòè, ñþäà îòíîñèòñÿ âîçìîæíîñòü êàñêàäíûõ îáíîâëåíèé è óäàëåíèé ïåðâè÷íûõ êëþ÷åé. Êîìïëåêñíîãî îáåñïå÷åíèÿ öåëîñòíîñòè äîìåíîâ. Ïðè íåîáõîäèìîñòè òðèããåðû ìîãóò èñïîëüçîâàòüñÿ äëÿ ïðîâåðêè çíà÷åíèé â äðóãèõ òàáëèöàõ è áàçàõ äàííûõ, à òàêæå äëÿ ñðàâíåíèÿ îáðàçîâ äàííûõ äî è ïîñëå îáíîâëåíèÿ. Îáåñïå÷åíèÿ ñëîæíûõ äåëîâûõ ïðàâèë. Ñ ïîìîùüþ òðèããåðîâ ðåøàþòñÿ òàêèå çàäà÷è, êàê àâòîìàòè÷åñêîå îôîðìëåíèå çàêàçîâ íà ïîêóïêó ïðè ìàëîì êîëè÷åñòâå òîâàðà íà ñêëàäå èëè îòìåíà ïîñòàâêè ïðè çàäåðæêå ïëàòåæåé. Âûáîð ñëîæíûõ çíà÷åíèé ïî óìîë÷àíèþ. Òðèããåðû ïîçâîëÿþò ïðèíèìàòü ðåøåíèÿ ïðè âûáîðå çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ ñòîëáöîâ. Ýòî ïîëåçíàÿ âîçìîæíîñòü, ïîñêîëüêó ïîëüçîâàòåëüñêèå çíà÷åíèÿ ïî óìîë÷àíèþ äîïóñêàþò ëèøü îäíî êîíêðåòíîå çíà÷åíèå äëÿ êàæäîãî ñòîëáöà. Òðèããåðû èñïîëüçóþòñÿ äëÿ îáåñïå÷åíèÿ öåëîñòíîñòè äàííûõ. Òàêàÿ âîçìîæíîñòü áûâàåò ïîëåçíîé ïðè ëîãè÷åñêîì ñåãìåíòèðîâàíèè äàííûõ èëè ïðè îáðàáîòêå äóáëèêàòîâ äàííûõ ïî ñîîáðàæåíèÿì áûñòðîäåéñòâèÿ (íàïðèìåð, äëÿ ïîëó÷åíèÿ ñâîäíîé èíôîðìàöèè).
Ñðàáàòûâàíèå òðèããåðîâ Òðèããåðû çàêðåïëÿþòñÿ çà òàáëèöåé è ñðàáàòûâàþò â îòâåò íà îïðåäåëåííûå êîìàíäû DML (Data Modification Language, ïîäíàáîð êîìàíä Transact-SQL). Èíà÷å ãîâîðÿ, âûïîëíåíèå êîìàíäû, ìîäèôèöèðóþùåé çàïèñü, âñåãäà ïðèâîäèò ê ñðàáàòûâàíèþ òðèããåðà. Ïîñêîëüêó òðèããåð ÿâëÿåòñÿ ÷àñòüþ èñõîäíîé òðàíçàêöèè, îí ìîæåò âûçâàòü îòêàò îòäåëüíîé êîìàíäû èëè âñåé òðàíçàêöèè. Áëàãîäàðÿ ýòîìó ïîÿâëÿåòñÿ âîçìîæíîñòü êîíòðîëèðîâàòü ìîäèôèêàöèþ òàáëèö ñ ïîìîùüþ ëîãèêè, ñâÿçàííîé ñ òàáëèöåé. Òðèããåðû âûïîëíÿþòñÿ òîëüêî îäèí ðàç äëÿ îäíîé êîìàíäû ìîäèôèêàöèè äàííûõ, íåçàâèñèìî îò êîëè÷åñòâà îáðàáàòûâàåìûõ çàïèñåé (äàæå åñëè êîìàíäà íå âëèÿåò íè íà îäíó çàïèñü èëè, íàîáîðîò, îáðàáàòûâàåò âñå çàïèñè òàáëèöû).Êîìàíäà ñîçäàíèÿ òðèããåðà èìååò ñëåäóþùèé ñèíòàêñèñ:
CREATE TRIGGER èìÿ_ òðèããåðà ON èìÿ_òàáëèöû[WITH ENCRYPTION]FOR {INSERT | UPDATE | DELETE} [,...][WITH APPEND][NOT FOR REPLICATION]AS[êîìàíäû SQL][RETURN]
Ïðè ñîçäàíèè òðèããåðîâ íåîáõîäèìî ó÷èòûâàòü íåêîòîðûå âòîðîñòåïåííûå îáñòîÿòåëüñòâà: Åñëè âû çàäàåòå âëàäåëüöà òðèããåðà, òàêæå íåîáõîäèìî çàäàòü âëàäåëüöà òàáëèöû (îñîáåííîñòü ñèíòàêñèñà ÿçûêà). Õîòÿ òðèããåðû âî ìíîãèõ îòíîøåíèÿõ ïîõîæè íà õðàíèìûå ïðîöåäóðû, îíè íå ïîëó÷àþò ïàðàìåòðîâ ïðè âûçîâå è íå ìîãóò ÿâíî âûçûâàòüñÿ èëè âûïîëíÿòüñÿ èç ïðîãðàììû. Êîìàíäà CREATE TRIGGER äîëæíà áûòü ïåðâîé êîìàíäîé â ïàêåòå. Òðèããåðû äåéñòâóþò ëèøü â áàçîâûõ òàáëèöàõ. Òåì íå ìåíåå, ìîæíî ñîçäàâàòü ïðåäñòàâëåíèÿ äëÿ òàáëèö, ñîäåðæàùèõ òðèããåðû. ×òîáû ñîçäàòü òðèããåð, íåîáõîäèìî ëèáî áûòü âëàäåëüöåì îáúåêòà, ëèáî îáëàäàòü ðîëüþ db_owner èëè db_ddladmin.
Òðèããåð îïðåäåëÿåò äåéñòâèå, êîòîðîå äîëæíî áûòü ïðåäïðèíÿòî áàçîé äàííûõ ïðè âîçíèêíîâåíèè â ïðèëîæåíèè íåêîòîðîãî ñîáûòèÿ. Òðèããåð ìîæåò èñïîëüçîâàòüñÿ äëÿ îñóùåñòâëåíèÿ îïðåäåëåííûõ îãðàíè÷åíèé ññûëî÷íîé öåëîñòíîñòè, êîìïëåêñíûõ îãðàíè÷åíèé ïðåäìåòíîé îáëàñòè áàçû äàííûõ èëè äëÿ êîíòðîëÿ èçìåíåíèé â äàííûõ. Êîä âíóòðè òðèããåðà, íàçûâàåìûé òåëîì òðèããåðà, ñîñòîèò èç áëîêà PL/SQL, ïðîãðàììû íà ÿçûêå Java èëè èç ïîäïðîãðàììû íà ÿçûêå Ñ, Òðèããåðû áàçèðóþòñÿ íà ìîäåëè "ñîáûòèå-óñëîâèå-äåéñòâèå" (EventCondition-Action — EGA), Êàê ñîáûòèå (èëè ñîáûòèÿ), êîòîðîå óïðàâëÿåò òðèããåðîì â Oracle, ðàññìàòðèâàþòñÿ îïåðàòîðû INSERT, UPDATE èëè DELETE, ïðèìåíÿåìûå ê óêàçàííîé òàáëèöå (èëè, âîçìîæíî, ïðåäñòàâëåíèþ); îïåðàòîðû CREATE, ALT3R èëè DROP, ïðèìåíÿåìûå ê ëþáîìó îáúåêòó ñõåìû; çàïóñê áàçû äàííûõ èëè îñòàíîâ ýêçåìïëÿðà Oracle; ðåãèñòðàöèÿ ïîëüçîâàòåëÿ â ñèñòåìå èëè âûõîä èç íåå; êîíêðåòíîå èëè ëþáîå ñîîáùåíèå îá îøèáêå.Òàêæå ìîæíî îïðåäåëèòü, êîãäà äîëæåí ñðàáîòàòü òðèããåð — äî èëè ïîñëåñîáûòèÿ. Óñëîâèå, êîòîðîå îïðåäåëÿåò, äîëæíî ëè áûòü âûïîëíåíî äåéñòâèå. Óñëîâèå ÿâëÿåòñÿ íåîáÿçàòåëüíûì, íî åñëè îíî îïðåäåëåíî, òî äåéñòâèå äîëæíî áûòü âûïîëíåíî òîëüêî òîãäà, êîãäà ýòî óñëîâèå èñòèííî. Äåéñòâèå, êîòîðîå äîëæíî áûòü ïðåäïðèíÿòî. Ýòîò áëîê ñîäåðæèò îïåðàòîðû SQL è êîä, êîòîðûå äîëæíû áûòü âûïîëíåíû, êîãäà âûäàåòñÿ àêòèâè-çèðóþùèé îïåðàòîð è óñëîâèå àêòèâèçàöèè òðèããåðà ïðèíèìàåò èñòèííîå çíà÷åíèå.
Åñòü äâà òèïà òðèããåðîâ: ñòðîêîâûå òðèããåðû (row-level triggers), êîòîðûå âûïîëíÿþòñÿ äëÿ êàæäîé çàòðîíóòîé àêòèâèçèðóþùèì ñîáûòèåì ñòðîêè òàáëèöû, è îïåðàòîðíûå òðèããåðû (statement-level triggers), âûïîëíÿþùèåñÿ òîëüêî îäèí ðàç, äàæå åñëè àêòèâèçèðóþùåå ñîáûòèå çàòðàãèâàåò ìíîæåñòâî ñòðîê. Áàçà äàííûõ Oracle ïîääåðæèâàåò òàêæå òðèããåðû INSTEAD-OF, îáåñïå÷èâàþùèå ïðîçðà÷íûé ñïîñîá ìîäèôèêàöèè ïðåäñòàâëåíèé, êîòîðûå íå ìîãóò áûòü ìîäèôèöèðîâàíû íåïîñðåäñòâåííî ñ ïîìîùüþ îïåðàòîðîâ SQL DML (INSERT, UPDATE è DELETE). Ýòè òðèããåðû íàçûâàþòñÿ òðèããåðàìè INSTEAD-OF, ïîñêîëüêó, â îòëè÷èå îò òðèããåðîâ äðóãèõ òèïîâ, áàçà äàííûõ Oracle àêòèâèçèðóåò èõ âìåñòî (instead-of) âûïîëíåíèÿ ïåðâîíà÷àëüíîãî îïåðàòîðà SQL. Òðèããåðû ìîãóò òàêæå àêòèâèçèðîâàòü äðóã äðóãà. Ýòî ìîæåò ïðîèñõîäèòü, êîãäà äåéñòâèå òðèããåðà âëå÷åò çà ñîáîé âíåñåíèå èçìåíåíèÿ â áàçå äàííûõ, êîòîðîå, â ñâîþ î÷åðåäü, âûçûâàåò äðóãîå ñîáûòèå, ñ êîòîðûì òàêæå ñâÿçàí òðèããåð. Èñïîëüçîâàíèå òðèããåðîâ äëÿ ðåàëèçàöèè ññûëî÷íîé öåëîñòíîñòè Oracle âûïîëíÿþòñÿ äåéñòâèÿ ON DELETE NO ACTION È ON UPDATE NO ACTION íà óðîâíå ññûëîê íà èìåíîâàííûå âíåøíèå êëþ÷è. ÑÓÁÄ Oracle òàêæå ïðåäîñòàâëÿåò âîçìîæíîñòü îïðåäåëåíèÿ äîïîëíèòåëüíîãî âûðàæåíèÿ ON DELETE CASCADE äëÿ òîãî, ÷òîáû ðàçðåøèòü êàñêàäíîå ðàñïðîñòðàíåíèå îïåðàöèè óäàëåíèÿ ñòðîê èç ðîäèòåëüñêîé òàáëèöû íà äî÷åðíþþ òàáëèöó. Íî ýòà áàçà äàííûõ íå ïîääåðæèâàåò äåéñòâèå ON UPDATE CASCADE èëè äåéñòâèÿ SET DEFAULT è SET NULL. Åñëè ýòè äåéñòâèÿ íåîáõîäèìû, òî îíè äîëæíû áûòü ðåàëèçîâàíû êàê òðèããåðû èëè õðàíèìûå ïðîöåäóðû ëèáî âûïîëíåíû â êîäå ïðèëîæåíèÿ.
2)Ñòðóêòóðà ïðåäëîæåíèÿ SELECT, óñëîâèÿ âûáîðà (ïîíÿòèå àëèàñîâ, âîçìîæíîñòè ïàðàìåòðà WHERE). Ñîåäèíåíèå òàáëèö. Âûáîðêà âû÷èñëÿåìûõ çíà÷åíèé. Âûáîðêà ñ èñêëþ÷åíèåì äóáëèêàòîâ (DISTINCT).
ÀËÈÀÑÛ:
SELECT column AS column_alias FROM table;
SELECT LastName AS Family, FirstName AS Name FROM Persons - âûâîäèòñÿ íà ýêðàí
SELECT column FROM table AS table_alias;
SELECT LastName, FirstName FROM Persons AS Employees – Ïîëó÷èì òàáëèöó ïîä íàçâ Employees
Ñåëåêò ñ óñëîâèåì: SELECT column FROM table WHERE column operator value
SELECT * FROM Persons WHERE LastName IN ('Hansen','Pettersen'); "Persons"
SELECT * FROM Persons WHERE City='Sandnes‘
SELECT áåç ïîâòîðîâ: SELECT DISTINCT column_name(s) FROM table_name; - èñïîëüçóåòñÿ ïâî èçáåæàíèå ïîâòîðîâ îäèíàêîâûõ ñòðîê
Ñåðèÿ ñîîáùåíèé "Áàçû äàííûõ":
×àñòü 1 - Ôàéëîâûå ñèñòåìû. Íàçíà÷åíèå ôàéëîâûõ ñèñòåì.
×àñòü 2 - Îñîáåííîñòè îðãàí õðàíåíèÿ äàííûõ
...
×àñòü 16 - Ãèïåðòåêñò. Íàâèãàöèÿ, êàê ñïîñîá äîñòóïà ê äàííûì. Web-èíòåðôåéñû ê áàçàì äàííûõ. XML è Web-ñëóæáû (Web-Services).
×àñòü 17 - 2)Ïðåäëîæåíèå SELECT ÿçûêà SQL. Îáúåäèíåíèå UNION. Êâàíòîð ñóùåñòâîâàíèÿ EXIST è NOT EXIST.
×àñòü 18 - Òðèããåðû â ðåëÿöèîííûõ áàçàõ äàííûõ.
×àñòü 19 - Ñïîñîáû âèçóàëèçàöèè ñòðóêòóð äàííûõ. ER-äèàãðàììû.
×àñòü 20 - Îáùèå ïîíÿòèÿ ðåëÿöèîííîãî ïîäõîäà ê îðãàíèçàöèè ÁÄ. Îñíîâíûå êîíöåïöèè è òåðìèíû. Îñíîâíûå ðåëÿöèîííûå ÑÓÁÄ
...
×àñòü 43 - Ìåòîä âñïîìîãàòåëüíîé òàáëèöû äëÿ ñëó÷àÿ ïðîèçâîëüíîãî ãðàôà. Îòëè÷èÿ îò ñëó÷àÿ ìîäåëèðîâàíèÿ èåðàðõèé
×àñòü 44 - Îáúåêòíî-îðèåíòèðîâàííàÿ ìîäåëü è ðåëÿöèîííàÿ ìîäåëü. Ñõîäñòâî è îòëè÷èÿ.
×àñòü 45 - Èñïîëüçîâàíèå «êîîðäèíàòíîãî» ìåòîäà äëÿ ìîäåëèðîâàíèÿ èåðàðõèé è ïðîèçâîëüíûõ ãðàôîâ. Åãî äîñòîèíñòâà è
| Ðóáðèêè: |
| Êîììåíòèðîâàòü | « Ïðåä. çàïèñü — Ê äíåâíèêó — Ñëåä. çàïèñü » | Ñòðàíèöû: [1] [Íîâûå] |