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

relacion recursiva en SQLServer

Estas en el tema de relacion recursiva en SQLServer en el foro de Bases de Datos General en Foros del Web. Hola, tengo una base de datos con una tabla de categorías, que es una relación recursiva, puesto que una categoría puede ser subcategoría de una ...
  #1 (permalink)  
Antiguo 18/08/2005, 05:42
 
Fecha de Ingreso: enero-2005
Mensajes: 23
Antigüedad: 19 años, 10 meses
Puntos: 0
relacion recursiva en SQLServer

Hola,
tengo una base de datos con una tabla de categorías, que es una relación recursiva, puesto que una categoría puede ser subcategoría de una o ninguna categoría,.....(qué lío). ¿No se puede hacer en este tipo de relaciones un on delete cascade o un on update cascade?¿Como sería en sqlserver?

graciasssssssss.
  #2 (permalink)  
Antiguo 18/08/2005, 06:30
Avatar de macedo  
Fecha de Ingreso: enero-2002
Ubicación: Madrid
Mensajes: 124
Antigüedad: 22 años, 10 meses
Puntos: 0
Hola de nuevo.

¿Que campos tiene la tabla?
¿Existe más de un nivel de subcategorías?
Lo digo por lo siguiente:

Si tienes in Id (clave principal) puedes añadir un campo (SubDe por ejemplo) en el que pones el id de la categoría a la que pertenece una subcategoría y hacer un delete teniendo ese campo en cuenta.

Si hay más de un nivel de subcategorias podrias hacer lo mismo pero acumulando las categorías de "arriba" con separadores.

Por ejemplo:

Id Categoria SubDe
1 Cat1 Null
2 Cat2 #1#
3 Cat3 #1#2#

De tal manera que puedes borrar toda la categoria "Cat1" con un

Delete From Tabla Where Id=1 or InStr(SubDe,"#1#")

O solo de "Cat2" para abajo con

Delete From Tabla Where Id=1 or InStr(SubDe,"#2#")

etc...

P.D:
Es importante que el campo SubDe empiece y termine siempre con el separador para poder hacer el InStr correctamente.
No recuerdo si InStr funciona bien en SQL Server. Tambien puedes usar SubDe Like '%#1#%'

Saludos

Última edición por macedo; 18/08/2005 a las 08:33
  #3 (permalink)  
Antiguo 18/08/2005, 17:14
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
¿Que es lo que quieres hacer?

Para controlar la integridad referencial la integridad recursiva si es permitida, al menos lo he probado en las tablas del tipo empleado, donde creo una llave foránea donde ID_JEFE apunta a ID_EMPLEADO en esa misma tabla (id_empleado es el primary key).

Lo puedes hacer visualmente en el Enterprise Manager en la parte de Design Table.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 18/08/2005, 23:09
 
Fecha de Ingreso: enero-2005
Mensajes: 23
Antigüedad: 19 años, 10 meses
Puntos: 0
Mi tabla es algo así:
CATEGORIAS(id primary key,nombre,idsub foreing key references CATEGORIAS(id))
pero no me deja hacer un ondeletecascade u onupdatecascade para que cuando se elimine una categoria superior, se eliminen todas las que tiene por debajo.....
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 23:15.