Pregunta

Proveedor

(PK) - Id
Nombre

Stand

(PK) - Id
VendorId - fk - eliminación en cascada si el Vendedor es eliminado)
Nombre

Elemento

(PK) - Id
VendorId - (fk - eliminación en cascada si el Vendedor es eliminado)
Nombre
Precio

UnavailableItem

(PK) - ItemId - (fk - eliminación en cascada si el Ítem es eliminado)
(PK) - StandId - (fk - eliminación en cascada si se elimina)

La base de datos anterior representa un estadio atlético.

  • Varios Proveedores de existir (Bob Pizza, Tom Tacos...)
  • Múltiples Stands existen para cada Proveedor (Bob Pizza Concourse a, pizzería Concourse B,...)
  • Los elementos están configurados por el Proveedor, tal como se representa un Vendedor en particular ofrecen los mismos elementos en los mismos precios
  • Stands pueden correr de un elemento en particular, por lo que el UnavailableItems tabla tiene un registro para cada elemento que ha de estar disponible en un determinado soporte (el uso de una clave principal compuesta de ItemId y StandId)

    Problema:

    Puedo crear todo bien hasta que me agregue el último de Clave externa de la lista (FK_UnavailableItem_StandId_Stand_id) con una Regla de eliminación:Cascada

    SQL Compact 3.5 (usando VS Servidor de 2010 Explorer) reporta el siguiente error:La relación referencial resultará en un ciclo de referencia que no está permitido.

    Entiendo que si me registro en el UnavailableItem tabla, y su Proveedor se elimina, intentará ser eliminado dos veces:

  • Una vez debido a su elemento que se hace referencia fue eliminado.
  • Una vez debido a su referencia stand fue eliminado.

    Sin embargo, este no parece ser cíclico para mí.La cascada-elimina la rama en dos caminos (se Eliminan los Stands y Elementos Eliminados) que ambos terminan en el mismo registro se elimina...pero no acaba allí.No hay ningún bucle infinito de cascada-elimina después de eso.Me estoy perdiendo algo, o se trata de una limitación de las herramientas que estoy utilizando?

    Gracias por cualquier ayuda que se le puede ofrecer!

  • ¿Fue útil?

    Solución

    No se puede eliminar a través de Cascade dos ramas, se trata de una limitación de la herramienta. Pero supresión en cascada es generalmente una mala cosa que hacer a su base de datos pobres inocentes de todos modos. Eliminar en la tabla inferior y moverse hacia arriba. De esta forma si usted tiene 100000000000 registros en la parte inferior se puede hacer en lotes de rendimiento. Eliminar en cascada puede causar problemas de rendimiento.

    Otros consejos

    Suponiendo SSCE no permite eliminación en cascada a lo largo de dos caminos, se puede quitar la eliminación en cascada para UnavailableItem.StandId.

    Al menos, todavía cascada cuando se elimina un proveedor, o un artículo.

    Y si UnavailableItem todavía contiene filas de stands eliminados, al menos que pudo filtrarse a cabo al unir UnavailableItem con el soporte, cuando la construcción de recarga órdenes ...

    Licenciado bajo: CC-BY-SA con atribución
    No afiliado a StackOverflow
    scroll top