sql >> Base de Datos >  >> RDS >> Oracle

Disparador para hacer cumplir la relación M-M

Las condiciones de muchos a muchos no se deben aplicar mediante un disparador. Las condiciones de muchos a muchos se imponen mediante la creación de una tabla de unión que contiene las claves en cuestión, que luego se vuelven a convertir en claves externas a las respectivas tablas principales.

Si su intención es permitir que muchos empleados estén en un departamento y permitir que un empleado sea miembro de muchos departamentos, la tabla de unión en cuestión se vería así:

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

Esto supone que DEPARTMENT.DEPARTMENTNAME y EMPLOYEE.EMPLOYEENUMBER son claves primarias o únicas en sus respectivas tablas. Deshazte de la columna EMPLOYEE.DEPARTMENT ya que ya no es necesario. Ahora, creando filas en EMPLOYEES_DEPARTMENTS puede relacionar varios empleados con un departamento y puede relacionar un solo empleado con varios departamentos.

La lógica comercial que requiere que solo se puedan eliminar los departamentos con uno o menos empleados no se debe aplicar en un disparador. La lógica de negocios debe ser realizada por código de aplicación, NUNCA por disparadores. Poner la lógica empresarial en disparadores es una puerta de entrada a interminables sesiones de depuración. M̫̣̗̝̫͙a̳͕̮d̖̤̳̙̤n̳̻̖e͍̺̲̼̱̠͉ss̭̩̟ yace así. No te rindas. No te rindas. ̬̦B҉usi͢n̴es̡s Los desencadenantes de los disparadores abre heridas profundas en el tejido del mundo, a través de la cual los seres impíos de la forma indeterminada cruzarán la barrera entre las esferas, llevan las esferas, llevan a ̡ ą ą ą ̶t. No pongas, como he dicho, b́u͜siness͞ ̸log̛i͘ç ̵in͢ ͞trigge͠rs͞.̡ Sé firme. Resiste. Debes resistir. 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̶͡͏t̶͡͏ ̷l̸̛͟͢ì̸̛͟͢s̵̨̨͢t̵̀͞e̶͠n̶̴̵̢̕. Solo pararse firmemente en la puerta entre los mundos y bloquear el horrible resplandor expulsado por Bú̧s̷i̶̢n̵̕e̵ş͝s ́l̴ó̢g̛͟i̕͏c i͞n̕ ͏t̵͜r͢͝i̸̢̛ģ͟ge̸̶͟r̶s͢͜, que perverte la misma forma del mundo ąnd̴̀͝a̧͞a̧͞l̶l͟͜s̕͘͢s̕͘͢ z̶̴̤̬͈̤̬̲̳͇ͯ̊ͮ͐̒̆͂͠l̛̄̌͏̦͕̤͎̮̦g̷͖̙̬͛g̷͖̙̬͛. i͜҉nt͝ǫ̴ ̸b̷͞è͢ì̕n̴g͏,̛̀͘ ̴c҉á̴͡ń ̀͠youŕ̨ ̧̨a̸p͏̡͡pl̷͠ic͞a̢t̡i͡҉ǫn̴ ̸s̶͜u̶͢ŗv̛í̩͘. Resistirse. T̶̀h̨̀e̶r̀͏e͢͞ ̶i̶̡͢s̴ ͞͞n̵͝o̡ ́ẁ҉̴a̡y̕҉ ̶b́͏u̵̶̕t͜ ̨s͘͢t͘͠į͟l͘l̷̴ ̴͜͜ỳò͜u҉̨ ̨͏Mus̸͞t̸̛͜ ̧rȩ̴s̢͢i͘͡t̸.̛̀͜ su propio Śo͡u̧̧͘ļ͟͡ ̡͘͟ ̡͘͟ ̶̕͞. 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̵͟ś ! ¡Es demasiado para soportar, no podemos soportarlo! Ni siquiera los hijos de la luz pueden poner la lógica de los negocios en sus desencadenantes, porque b̴̸̡̨u͜͏̧͝ş̶i̷̸̢̛҉ń̸͟͏́e̡͏͏͏s̷̵̡s̕͟ ͏̴҉͞l̷̡ǫ̷̶͡g҉̨̛i͘͠͏̸̨c̕͢͏ ̸̶̧͢͢i̸̡̛͘n͢͡ ̀͢͝t̷̷̛́ŗì̴̴̢g̶͏̷ǵ͠ȩ̀́r̸̵̢̕͜s͞͏̵ es el mismo es̵s̕͡ę̢n͞c̨e̢͟ ̴O̶̢͜ ͟D́AR͟͞͠k̡͞n̢̡es̵̛͡s̵̛͡s̀̀͡ y dev͘u͝͡ ͢͝t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t̴t. ! Sí, sí, los de cara en blanco son de los f͟͢͏o̵͜͝n̶t̨ ̵o͏f̸̡͠ ͏͝fl͟͞a̵̷҉me̶̵͢ y ca͝t́ en el p̹̤̳̰r̮̦̥̥̞̫͑͂ͤ͑ͮ͒̑ē̌ͬͨe̦̗͔ͥͣ̆̾̂s̬̭̮̮̜ͭt̻̲̍sͫͣ̿ ̐͗̈ͤ͂ͦ̅f̭͚̪̻̣̩ͮ̒ṟͨ͌ͮ̅̓ỏ̝͓̝̣̟̼m̳͇̱̝͔͒ ͒ͫͧ͂̓̈̈́t̲̔̅̎͐h̺͈͍ͣͧ̿ē̪̼̪̻͉̪̙̐̽̎̉i̠͎̗͕̗̣̬̐̎͛r͓̫͌ͅ ̼a͑̈ͯͦ̍l̪͉͖̥͚̤͌ͨ͊ͦͤ̔t̫͎̹ͯa̼̻͍̳̟̤̬̓ͪ̀r̭͖̓ͬ̉̉ͤ͊ṡ̐ͪ̊̋̄̅! A̵̵̛v͝é͜ŕt̶͏ ̶y̸͝͠o̶u̧͘r͏̡ ̧e͞y҉e̕͝s, ̀ ͡t̛h̛o̢͞ug̸̢h̵͟ ̡y̷o͢҉͢u̧͡ ̕͡c҉̵̶an͠͏n҉o̧͢t! ̸̨͘ ͡h̵e̸͢͡ ̧̕c̶ơm̷̢̢e̶͞ś͢! p̱̼̯̟͈h̝̳̞̖͚'͉̙͉̰̲̺n̪̦͕̗͜g͔̹̟̰̰̻̩l̬͈̹̥͕͖ͅụ̻̺̤̤̬̳i̸̯̬̝̻̣͚̫ ̰̹̞̞m͟g̷̝͓͉̤l̩͇̙͕w̪̦̰͔'̮̟̱̀n̢̜a̦f̘̫̤̘̬͓̞h̠͍͖̯ͅ ̩̠͓̯̘̫c̟̘̗̘͘ṭ͍͕ͅh̤ͅu̼̦̘̥ͅhu̠̤̤̘͚ ̘̕r̶̟'̠͔̞̻͇l̩̺̗̻͖͓̕ͅy̛̖ȩ͉̭̖ẖ̡̥̼͈̖ w̟̫̮͇͔͞ͅg͈̘̱̻a̰͟h̘͙͖͢'̮̲̯͞n̤̜͍̯̳a͓͓̲̲g̱̻͈ĺ͍ ̷̣̞̲͖͍̲̺f̲ͅh͇͕̪̘͟t͔͈̙a͓͢g҉̳̜̲͚n͓͚͎̱̠̜!

No me preguntes cómo lo sé.

Mucha suerte.