2011-01-05 9 views
21

Conozco el propósito de "Aplicar restricción de clave externa" en RDBMS. ¿Pero hay algún beneficio cuando se establece en "NO"?Servidor Sql: ¿Cuál es la ventaja de utilizar "Aplicar restricción de clave externa" cuando está configurado en "NO"?

+0

Cuando tiene dos claves primarias iguales en dos tablas y tiene que establecer una relación de clave externa, entonces tiene que establecer "Aplicar la restricción de clave externa" a "No". Esto es bastante confuso, por lo que le doy la url de youtube a continuación, será claro después del final de este video. https://www.youtube.com/watch?v=H7uGGg1BQ2Y –

Respuesta

21

En la producción normal, esta configuración debe nunca establecerse en NO.

Pero: cuando está desarrollando, o reestructurando una base de datos, o cuando lo hace, p. una gran carga masiva de datos que necesitará "desinfectar" (limpiar), entonces puede tener sentido desactivar restricciones de clave externa para permitir que los datos "no válidos" se carguen en una tabla. Por supuesto, como dije, no debes mantener esa configuración apagada durante un largo período de tiempo, debes proceder a limpiar los datos, eliminar esas filas que violan la restricción FK o actualizar sus valores. para que coincidan con una fila principal.

Así que de nuevo: en el modo de producción "normal", esta configuración nunca debería ser NO, pero para tareas específicas, podría ayudar a hacer el trabajo más fácilmente. Úselo con precaución y siempre vuelva a activar las restricciones FK tan pronto como pueda.

+0

Gracias por su nota, pero hay circunstancias en las que ingresamos datos a una columna para decir, por ejemplo, todos los datos predefinidos. Quiero decir, si los datos válidos son 1,2 y 3, entonces para decir todos ponemos -1 en la columna. En estas situaciones, debemos establecer "Aplicar restricción de clave externa" a NO en el diagrama. ¿derecho? Entonces, ¿es realmente necesario crear una relación? – odiseh

+1

@odiseh: No. En su caso, sería mejor eliminar la clave foránea ya que no sirve para nada. En cambio, podría crear una restricción CHECK para validar los valores de los datos. – sqlvogel

+3

+1 por decirlo como es. Veo este entorno abusado todo el tiempo en algunas compañías con las que contrato. Siempre conduce a problemas. Añadiría que a veces lo uso como un paso intermedio cuando no existe una clave externa que debería existir y quiero agregarlo. A veces no estoy seguro de que todas las aplicaciones de referencia estén haciendo sus operaciones en el orden correcto, y esto me permite definir la relación de inmediato, probar las aplicaciones en cuestión (o buscar su código) y luego activar la aplicación. –

3

No en el uso diario, por lo que yo sé. Las veces que he forzado el uso de claves foráneas por un tiempo son cuando hay problemas con los datos y su reparación queda oculta por las verificaciones de relaciones.

Durante las operaciones masivas, las comprobaciones de restricciones se ignoran temporalmente para aumentar el rendimiento.

Cuestiones relacionadas