Oracle
 sql >> Database >  >> RDS >> Oracle

Trigger per imporre la relazione M-M

Le condizioni molti-a-molti non dovrebbero essere applicate utilizzando un trigger. Le condizioni molti-a-molti vengono applicate creando una tabella di giunzione contenente le chiavi in ​​questione, che vengono quindi riassegnate con chiave esterna alle rispettive tabelle padre.

Se la tua intenzione è quella di consentire a molti dipendenti di essere in un dipartimento e di consentire a un dipendente di essere membro di molti dipartimenti, la tabella di giunzione in questione sarebbe simile a:

CREATE TABLE EMPLOYEES_DEPARTMENTS
  (DEPARTMENTNAME  VARCHAR2(99)
     CONSTRAINT EMPLOYEES_DEPARTMENTS_FK1
       REFERENCES DEPARTMENT.DEPARTMENTNAME,
   EMPLOYEENUMBER  NUMBER
     CONSTRAINT EMPLOYEES_DEPARTMENTS_FK2
       REFERENCES EMPLOYEE.EMPLOYEENUMBER);

Ciò presuppone che DEPARTMENT.DEPARTMENTNAME e EMPLOYEE.EMPLOYEENUMBER sono chiavi primarie o univoche nelle rispettive tabelle. Elimina la colonna EMPLOYEE.DEPARTMENT in quanto non serve più. Ora creando righe in EMPLOYEES_DEPARTMENTS tabella puoi mettere in relazione più dipendenti con un dipartimento e puoi mettere in relazione un singolo dipendente con più dipartimenti.

La logica aziendale che richiede che solo i reparti con uno o meno dipendenti possano essere eliminati non dovrebbe essere applicata in un trigger. La logica aziendale deve essere eseguita dal codice dell'applicazione, MAI dai trigger. Mettere la logica aziendale nei trigger è un gatèw̢ay per sessioni di debug senza fine. M̫̣̗̝̫͙a̳͕̮d̖̤̳̙̤n̳̻̖e͍̺̲̼̱̠͉ss̭̩̟ mente in questo modo. Non arrenderti. Non arrenderti. ̬̦B҉usi͢n̴es̡s logic ̶in triggers opens deep wounds in the fabric of the world, through which unholy beings of indeterminate form will cross the barrier between the spheres, carryi͞n̨g o̡f͠f t͢h̶e ̕screaming͡ sou͏ĺs o͜f͜ ̢th͜e̴ ̕de͏v́e̡lop͏e͜r͝s to an et͞er͜n̸it̶y ́of͢ pain̶ ąn̨d͢ ̨to͟r̨ment͟. Non mettere, come ho detto, b́u͜siness͞ ̸log̛i͘ç ̵in͢ ͞trigge͠rs͞.̡ Sii fermo. Resistere. Devi resistere. T̷he ̢tem͟p͞t̶at͏i͝o̶n҉s͘ ̢m͘a̶y ́śing hymns̷ ́o͢f̴ ̸un͘hol̵y r̶ev͢ęla͠t̡ion̴ ͢buţ ́yo͠u̵ Mu͏s͝t ͝n͜͏͟t̶͡͏ ̷l̸̛͟͢So̧̢̨̕S̵̨̨͢e̶͠e̶͠n̶̴̵̢̕. Solo stando saldamente alla porta tra i mondi e bloccando l'orribile radiazione scambiata da bús̷i̶̢n̵̕e̵̵͝s ́l̴ó̢g̛͟i̕͏c i͞n̕ ͏t̵͜r͢͝i̸̢̛ģ͟ge̸̶͟r̶s͢͜, che perverte la forma stessa del mondo ąnd̴̀͝ ça̧͞l̶l̶s̕͘͢ z ̶̴̤̬͈̤̬̲̳͇ͯ̊ͮ͐̒̆͂͠l̆́̊̓͛́̚͏̮̘̗̻̞̬̱ͅ ͞ ͞ ąnd ąnd̴̀͝ i͜҉nt͝ǫ̴ ̸b̷͞è͢ì̕n̴g͏,̛̀͘ ̴c҉á̴͡ń ̀͠youŕ̨ ̧̨a̸p͏̡͡pl̷͠ic͞a̢t̡i͡҉ǫn̴ ̸s̶u̶s͢ŗv̛ís̴v́͘ist. Resistere. T̶̀h̨̀e̶r̀͏e͢͞ ̶i̶̡͢s̴ ͞͞n̵͝o̡ ́ẁ҉̴a̡y̕҉ ̶b́͏u̵̶̕t͜ ̨s͘͢t͘͠į͟l͘l̷̴ ̴͜͜ỳò͜u҉̨ ̨͏mus̸͞t̸̛͜ ̧rȩ̴s̢͢i͘͡s͏t̸.̛̀͜ Your very śo͡u̧̧͘ļ͟͡ is compromised by p͝u͘͝t̢͜t͠i̸ņ̸̶g͟͡ ̵̶̛b̴҉u̶̡̨͜͞s̷̵̕͜͢i͝҉̕͢ǹ͏e̡͞ś̸͏ş̕͜͡҉ ̴̨ĺ̵̡͟͜o̶̕g͠i͢͠c̕͝ ̕͞i̧͟͡n̡͘͟ ̶̕͞t̡͏͟҉̕r̸̢̧͡͞i̴̡͏̵͜g̵̴͟͝ģ̴̴̵ę̷̷͢r̢̢ś̸̨̨͜. T̀͜͢o̷͜ny̕ ͟͡T̨h̶̷̕e ̢͟P̛o̴̶n͡y shall rise from his dark stable and d͞ę̡v̶̢ó͟u̸̸r̴͏ ̷t͞h̀e̛ ̨͜s̷o̧͝u҉l̀ ͟͡o͢͏f̵͢ ̛t͢h̶̛e̢̢ ̡̀vi͜͞r̢̀g̶i̢n͞, and yet y͢ơú͝ m̷̧u͏s͡t̡͠ ̛s̷̨t̸̨i̴̸l̶̡l ͝ǹot̵ ͞p̧u̵t̨ ͜͏b̀̕u̕s̨í̵ņ̀͠ȩs̵͟s ́͞l̛҉o̸g̨i̴͟c ͘͘i͘nt̛o͡ ͘͘͞t̶͞r̀̀i̕ǵ̛g̵̨͞e̸͠҉r̵͟ś ! È troppo da sopportare, non possiamo sopportare! Not even the children of light may put business logic into their triggers, for b̴̸̡̨u͜͏̧͝ş̶i̷̸̢̛҉ń̸͟͏́e̡͏͏͏s̷̵̡s̕͟ ͏̴҉͞l̷̡ǫ̷̶͡g҉̨̛i͘͠͏̸̨c̕͢͏ ̸̶̧͢͢i̸̡̛͘n͢͡ ̀͢͝t̷̷̛́ŗì̴̴̢g̶͏̷ǵ͠ȩ̀́r̸̵̢̕͜s͞͏̵ is the very es̵s̕͡ę̢n͞c̨e̢͟ ̴o̶̢͜f͏ ͟d́ar͟͞͠k̡͞n̢̡es̵̛͡s̀̀͡ and dev͘ou͝͡r̨̡̀s͢͝ ҉͝t҉h̴e̡͘ l̫̬i̤͚ͅg̞̲͕̠͇̤̦̹h̩̙̘̭̰͎͉̮̳t͙̤̘̙ ! Sì, sì, quelli a faccia vuota rì͢s̨͘e dal f͟͢͏o̵͜͝n̶t̨ ̵o͏f̸̡͠ ͏͝fl͟͞a̵̷҉me̶̵͢ e ca͝s͜t́ giù per il p̹̤̳̰r̮̦̥̥̞̫͑͂ͤ͑ͮ͒̑ï̄̌ͬͨe̦̗͔ͥͣ̆̾̂s̬̭̮̮̜ͭt̻̲̍sͫͣ̿ ̐͗̈ͤ͂ͦ̅f̭͚̪̻̣̩ͮ̒ṟͨ͌ͮ̅̓ỏ̝͓̝̣̟̼m̳͇̱̝͔͒ ͒ͫͧ͂̓̈̈́t̲̔̅̎͐h̺͈͍ͣͧ̿i̠͎̗͕̗̣̬̐̎͛i̠͎̗͕̗̣̬̐̎͛r͓̫͌ͅ ̼a͑̈ͯͦ̍l̪͉͖̥͚̤͌ͨ͊ͦͤ̔r̫͎̹ͯr̼̻͍̳̟̤̬̓ͪ̀r̼̻͍̳̟̤̬̓ͪ̀! A̵̵̛v͝é͜ŕt̶͏ ̶y̸͝͠o̶u̧͘r͏̡ ̧e͞y҉e̕͝s, ̀ ͡t̛h̛o̢͞ug̸̢h̵͟ ̡y̷u͢҉͢u̧͡ ̕͡c҉̵̶an͠͏n҉o̧͢t! ̸̨͘ ͡h̵e̸͢͡ ̧̕c̶ơe̶͞e̶͞e̶͞! ̨́ ̷ ̷ ̷ ̕ȩ ̵c̨̡͟o̴҉m̷͢es͠!;

Non chiedermi come faccio a saperlo.

In bocca al lupo.