Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Múltiples Acciones en Cascada

Estas en el tema de Múltiples Acciones en Cascada en el foro de SQL Server en Foros del Web. Hola, soy nuevo en el foro y como cosa rara de los nuevos, vengo pidiendo ayuda jeje. En realidad en forosdelweb casi siempre he encontrado ...
  #1 (permalink)  
Antiguo 22/05/2009, 07:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 2
Antigüedad: 14 años, 11 meses
Puntos: 0
Múltiples Acciones en Cascada

Hola, soy nuevo en el foro y como cosa rara de los nuevos, vengo pidiendo ayuda jeje.

En realidad en forosdelweb casi siempre he encontrado las soluciones a mis dudas. Seré breve con mi explicación:

Tengo 2 tablas:

Paises
-Id (Clave primaria)
-Nombre

Persona
-Id (Clave primaria)
-Nombre
-Apellido
-IdPaisOrigen (Clave foránea)
-IdPaisResidencia (Clave foránea)

De esta forma, a cada persona puedo asignarle un país de origen y un país de residencia.

Las relaciones serían:

1) Pais.Id <--> Persona.IdPaisOrigen
2) Pais.Id <--> Persona.IdPaisResidencia

El problema está cuando en SQL Server (2008) Management Studio, intento hacer las restricciones de integridad referencial en cascada para ambas relaciones. Aparentemente, no puedo/debo crear más de una relación (usando restricciones de casacada) con la misma tabla.

El mensaje de error que aparece (al intentar crear la segunda relación) es:
Cita:
No se puede crear la relación 'FK_Persona_PaisResidencia'.
Si especifica la restricción FOREIGN KEY 'FK_Persona_PaisResidencia' en la tabla 'Persona', podrían producirse ciclos o múltiples rutas en cascada. Especifique ON DELETE NO ACTION o UPDATE NO ACTION, o bien modifique otras restricciones FOREIGN KEY.

¿Qué opinan? Cómo puedo estalecer las restricciones en cascada para estas relaciones? Será un error de diseño de mi modelo E/R? Se solucionará planteándolo de una forma alternativa? Tendré que usar "Desencadenadores" para esta simple relación?

La documentación oficial (SQL Server 2005) dice:

Cita:
Las series de acciones referenciales en cascada desencadenadas por DELETE o UPDATE deben formar un árbol que no contenga referencias circulares. Ninguna tabla puede aparecer más de una vez en la lista de todas las acciones referenciales en cascada que se obtienen de DELETE o UPDATE. Además, el árbol de acciones referenciales en cascada no puede tener más de una ruta de acceso a una tabla determinada. Las ramas del árbol se terminan cuando encuentran una tabla para la que se haya especificado NO ACTION o cuando éste sea su valor predeterminado.
Fuente: technet.microsoft.com/es-es/library/ms186973(SQL.90).aspx

Encontré un tema similar a mi duda acá:
forosdelweb.com/f87/no-deja-crear-eliminacion-cascada-422186
pero quedó inconcluso.

Desde ya, muchas gracias. Agradeceré enormemente las ayudas.

Última edición por EviLito; 28/05/2009 a las 08:20 Razón: Agregado mensaje de error de SQL Server 2008
  #2 (permalink)  
Antiguo 28/05/2009, 08:20
 
Fecha de Ingreso: mayo-2009
Mensajes: 2
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Múltiples Acciones en Cascada

¿Alguien que quiera ayudar?
  #3 (permalink)  
Antiguo 22/06/2009, 09:06
 
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Múltiples Acciones en Cascada

Hola EviLito... Estaba buscando tambien por la web una mejor manera de sortear este problema. Normalmente yo lo hago de la siguiente forma:
Creo otras dos tablas que contienen la clave primaria de ambas; por ejemplo:
1) Primera tabla "PersonaPaisOrigen" con los campos Id(Tabla pais), id(Tabla Persona)
2) Segunda tabla "PersonaPaisResidencia" con los campos Id(Tabla pais), id(Tabla Persona)

Espero que te sirva.... Aunque tambien estoy buscando algo menos complicado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:29.