La creación de su modelo de datos físicosALTER TABLE ADD CONSTRAINT OrderItem FK__OrderItem_SalesOrder FOREIGN KEY (SalesOrderID) REFERENCIAS SalesOrder (SalesOrderID) ON DELETE CASCADE
¿Por qué es esta declaración llama declarativo restricción de integridad referencial? Debido a que declare el comportamiento de la integridad referencial de la tabla como parte de la definición de la tabla sí mismo, en oposición a la aplicación de tal comportamiento como una pieza separada de código informático ejecutable. Ahora romper esta limitación DRI y mira lo que significa cada frase, a partir de los siguientes : ALTER TABLE ADD CONSTRAINT OrderItem FK__OrderItem_SalesOrder La frase anterior, modifica la definición de la tabla secundaria OrderItem para agregar la restricción del objeto con nombre FK__OrderItem_SalesOrder. Este objeto contiene las otras tres líneas de código, que componen las instrucciones reales de la restricción, como sigue: FOREIGN KEY (SalesOrderID) REFERENCIAS SalesOrder (SalesOrderID) Esta frase es la "carne y papas" de la restricción de DRI. Se crea la restricción entre el OrderItem.SalesOrderID clave externa y el SalesOrder clave principal. SalesOrderID de modo que, para cada valor almacenado en OrderItem.SalesOrderID, igual valor debe ser almacenado en SalesOrder.SalesOrderID con que OrderItem.SalesOrderID puede igualar. Si cualquier otro valor que se intenta en OrderItem.SalesOrderID, la base de datos arroja un error y el intento falla. Por último, la última línea de la restricción de DRI es el siguiente: ON DELETE CASCADE Esta línea indica a la base de datos para eliminar primero todas las filas OrderItem relacionadas con una fila SalesOrder que está a punto de ser eliminado. Sin la cláusula ON DELETE CASCADE en esta restricción DRI, tratando de eliminar una fila SalesOrder relacionadas con filas OrderItem arrojaría un error, y no los cambios se harían al contenido, ya sea tabla. Las cuatro primeras líneas de código de restricción son sintaxis DRI norma sustentada por mayoría de las plataformas de base de datos. Algunas plataformas de base de datos, como SQL Server 2000 y Oracle 9i, el apoyo a la ampliación ON DELETE CASCADE DRI a la sintaxis básica para facilitar estas eliminaciones en cascada. Para las plataformas de base de datos que no admiten eliminaciones en cascada en las restricciones DRI, la eliminación en cascada comportamiento debe ser aplicado mediante una pieza separada de código que se ejecuta automáticamente cada vez que un usuario intenta eliminar una fila SalesOrder. Una pieza de forma automática la ejecución de código se llama un disparador. A pesar de que discutir a fondo los desencadenantes más tarde, tenemos que cubrir lo básico de lo que son y cómo funcionan aquí para que pueda contrastar y comparar a los condicionamientos DRI. En primer lugar, ¿por qué se llaman factores desencadenantes? La respuesta es que la ejecución de uno se "activa" por un evento de base de datos (INSERT, UPDATE o DELETE). Un disparador se adjunta a una tabla específica y se le instruye para ejecutar automáticamente cada vez que uno o más eventos de base de datos específica tendrá lugar en la tabla. Usted puede colocar casi cualquier código SQL que desea en un disparo, incluyendo el código que modifica el contenido de otros tablas. Tomemos, por ejemplo, la siguiente cláusula: ON DELETE CASCADE Si se implementa como un disparador, la cláusula anterior se convierte en el siguiente código: TD_SalesOrder CREATE TRIGGER ON SalesOrder PARA ELIMINAR AS BEGIN DECLARE @ seleccionar filas int filas = @ @ @ @ SI recuento de filas filas = 0 RETURN DELETE OrderItem DE CH OrderItem, supriman en caso de ch.SalesOrderID = deleted.SalesOrderID FIN Ahora, para romper lo que está sucediendo en este código. En primer lugar, comenzar con el encabezado de gatillo. Este encabezado tanto crea el gatillo y lo adjunta a una tabla específica, y también especifica los sucesos que los incendios, como sigue: TD_SalesOrder CREATE TRIGGER ON SalesOrder PARA ELIMINAR AS En otras palabras, se está creando un desencadenador en la tabla SalesOrder nombre tD_SalesOrder, y usted está instruyendo a ejecutar cada vez que un evento se produce DELETE en la tabla SalesOrder. Hasta ahora, todo bien. Ahora mira el cuerpo del disparador, la parte que realmente ejecuta-como sigue: BEGIN DECLARE @ seleccionar filas int filas = @ @ @ @ SI recuento de filas filas = 0 RETURN Usted comienza el bloque de código con BEGIN y de inmediato declarar una variable local de tipo Integer denominado @ filas. Esta variable contiene el número de filas en la tabla de SalesOrder afectados por el evento SUPR. La variable global @ @ recuento de filas es controlada por el servidor de base de datos, sino que siempre contiene el número de filas afectadas en la mesa más recientemente modificada por el código se está ejecutando actualmente, que en este caso es la tabla SalesOrder. Así que seleccione Filas = @ @ @ lugares de recuento de filas el número de filas eliminadas de la tabla SalesOrder en la variable local que acaba de declarar. Si el número de filas afectadas es igual a cero, el código de activación con gracia salidas mediante la instrucción RETURN, y nada más pasa. Si esta prueba devolución no existe en el código de activación, el resto del código de activación se ejecuta, y no queremos que eso ocurra porque sería ejecutar el código que sólo debe ejecutarse si no están relacionados con filas de niños. Ahora a la parte del disparador que de hecho la eliminación en cascada, como sigue: DELETE OrderItem DE ch OrderItem, supriman en caso de ch.SalesOrderID = deleted.SalesOrderID FIN Esta relacional delete elimina las filas de la tabla OrderItem que están relacionadas con todas las filas del suprimido pseudotable-en esencia, todas las filas OrderItem relacionados con las filas SalesOrder eliminado. Por último, cierra el cuerpo de la activación mediante END. Disparadores tienen muy capacidades diferentes en las plataformas de bases de datos diferentes. El detonante que acabamos de discutir, por ejemplo, opera en la plataforma SQL Server 2000, que define un evento a nivel de declaración-el sentido de que el gatillo se dispara una vez para cada DELETE ejecutados sobre la mesa, no importa cuántas filas se ven afectados por esa declaración. En comparación, Oracle desencadenantes pueden operar ya sea a nivel de declaración, así como en SQL Server, o en el nivel de fila, de modo que el código de activación se ejecuta una vez para cada fila individual que se ve afectada por la declaración. Otra diferencia entre las plataformas de base de datos es cuando se puede despedir a los factores desencadenantes. Servidor SQL incendios dispara después de que el evento tiene lugar y todos los valores son modificados por la declaración (pero antes de que se han comprometido a disco), Oracle le permite definir un disparador para ejecutar antes o después del evento. También existen otras distinciones. Así que cuando usted implementar integridad referencial mediante restricciones DRI y cuándo utilizar los desencadenantes? Bueno, una restricción de DRI es casi siempre más rápidos que la operación equivalentes a cabo en un disparador-y, ciertamente, son más fáciles de código, pero a veces puede necesitar una lógica más compleja que se trate, y para ello es necesario utilizar factores desencadenantes.
Muchas veces usted quiere suministrar automáticamente los valores por defecto a las filas insertar en una tabla, por ejemplo, la fecha y la hora de una venta, o un valor de estado que representa alrededor del punto de inicio en un proceso de negocio. Este comportamiento se implementa mediante el uso de valores predeterminados por defecto se definen en las columnas de la tabla específica, y que informe a su base de datos, "Si esta columna no está incluido en la instrucción INSERT para esta tabla, siga adelante y automáticamente entrar en este valor por defecto. Si la instrucción INSERT se incluyen en esta columna, utilizar cualquier valor fue suministrada por él ". Así es como una declaración por defecto busca en la definición de la tabla: CREATE TABLE SalesOrder (IDENTIDAD SalesOrderID int (1,1), customernumber varchar (12) NULL, fecha y hora SaleDate DEFAULT GetDate () NOT NULL, Usted notará en este artículo que de vez en cuando las porciones de código en negrita. Este es un mecanismo simple y eficaz para ayudarle a "ver el bosque por los árboles", como hablamos de un tema. Por ejemplo, destaca la frase defecto en un bloque de código, mientras que por defecto le ayuda a examinar adquirir rápidamente la parte más aplicables del Código sin distraerse con el resto durante el debate. Esta declaración predeterminada coloca automáticamente el resultado de GetDate de SQL Server () funciona - la fecha y la hora actuales-en la columna SaleDate siempre y cuando la columna SaleDate no es una parte de la instrucción INSERT. Si la columna SaleDate es parte de la instrucción INSERT, el valor proporcionado por la declaración será utilizado. un artículo presentado por Linda Hastings Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito. Importante: Este artículo "Creación de su modelo de datos físicos", fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.
|
|||||
| Online: 257 users browsing the articles directory |
|
|