Integridad referencial - Evitar el borrado en cascada.

20/08/2007 - 18:56 por Juan Carlos Flores | Informe spam
Tabla Usuarios:
PKUser
User
fkGrupo

Tabla GrupoUsuarios
PKGrupo
Grupo


Planteo un ejemplo de usuarios y grupos de usuarios, como puedo evitar
el borrado de un grupo si este grupo ya tiene usuarios ?

Solo veo en la relaciones opciones de borrar los usuarios del grupo, o
borrar el grupo y no hacer nada en usuarios o borrar el grupo y dejar
como nulo el campo de FKUser de la tabla de usuarios en los uasuarios
de ese grupo.

Saludos


Preguntas similare

Leer las respuestas

#11 principiante
21/08/2007 - 00:39 | Informe spam
No se si es que no he captado bien lo que dicen , pero para mi SQL Server
hace todo eso que ustedes estan diciendo.

Con solo definir la relacion de integridad tienes primero el control de
borrado (que era lo que el preguntaba de inicio)... Ahora, si quieres que se
borren los registros relacionados sin preguntar, simplemente definelo en la
relacion (borrado en cascada - Cascade Delete). Si quieres que al cambiar
la PK de la tabla destino de la relacion se actualicen las foraneas de las
tablas relacionadas, pues tambien lo puedes definir (actualizacion en
cascada - Cascade Update) y listo. SQL Server lo hace automaticamente, sin
triggers y sin nada.

Jose TH


En ese caso, Juan Carlos, creo que lo más adecuado es que decidas para
cada uno de los supuestos si utilizar borrados en cascada o triggers,
porque supongo que habrá casos en los que puedas hacer un borrado
incondicional (p.e. si tienes un historial de entradas de un usuario, al
borrar el usuario, debería quedar borrado dicho historial
incondicionalmente, sino no tendría sentido su existencia, y obviamente no
te vas a poner a borrar registro por registro)

Y respecto a esto, que me corrija alguien si me equivoco, no se si algún
SGBD permite lo que tu planteas sin el uso de triggers añadiendo algún
tipo de cláusulas. Si algún experto en otros SGBD conoce algo similar,
estaría bien su aportación.

Suerte, saludos

Juan Diego Bueno www.moondance.tk

"Juan Carlos Flores" escribió en el mensaje
news:
Bueno, si no hay de otra ni modo, mira que eso solo es un ejemplo el
hablar de Usuarios yu Grupos de usuarios, pero si hablamos de los
usuarios por ejemplo, estos puden haber tenido actividades en uno
muchisimas o ninguna de las tablas del sistema, asi que habria que
crear unu procedimiento que verifique en todas las tablas donde hubiera
un FKuser si el usuario que se quiere borrar tiene registros
dependientes.

Me hubiera gustado mas que SQL server lo hubiera hecho por mi con solo
comprender la integridad referencial.

Saludos y gracias.


Juan Carlos Flores
Choluteca, Honduras

Juan Diego Bueno wrote:

Pues lo que yo te decma, recurre a triggers, que una de sus funciones
es esa, mantener ese tipo de integridad referencial que tu buscas
cuando no hay otros recursos

Saludos










Respuesta Responder a este mensaje
#12 principiante
21/08/2007 - 00:59 | Informe spam
Actualmente yo uso SQL 2000 y simplemente defino la relacion sin variar
ninguna accion o sea con los parametros por defecto. Imagino que en SQL 2005
sería "No action" al crear la relación o "foreign key".

De todos modos siempre puedes hacerlo por un Script:
Ej:

ALTER TABLE [dbo].[USUARIOS]
ADD CONSTRAINT [FK_USUARIOS_GRUPOS] FOREIGN KEY (grupoFK)
REFERENCES [dbo].[GRUPOS] (grupo)

Si no se indica más nada, ya tendrás el control de borrado de grupos que
quieres.


Jose TH



"Juan Carlos Flores" escribió en el mensaje
news:
Bien, entonces donde lo hago ?

Uso MS SQL Server 2005


Gracias


Juan Carlos Flores
Choluteca, Honduras


principiante wrote:

> En niguna de ellas encuentro como proteger el borrado del grupo
> debido a tener usuarios, lo que necesito es poder NEGAR el borrado
> del grupo si hay usuarios referidos a el mediante fkGrupo en la
> tabla de usuarios.
>
> Saludos y gracias por ayudarme.


Si no me equivoco, creo que tienes un confusisn.

Es que la relacisn de integridad hace justamente eso que quieres, por
defecto.

No tienes que configurar mas nada, sslo definir la relacisn de
integridad pura y simplemente. Con eso te dara un error cuando
trates de borrar un grupo que ya tiene usuarios relacionados. No es
eso lo que quieres?

De las acciones que hablas son para la actualizacisn en cascada de
las claves foraneas. Eso es otra cosa.


Jose TH






Respuesta Responder a este mensaje
#13 Juan Carlos Flores
21/08/2007 - 01:02 | Informe spam
Juan Carlos Flores wrote:

Bien, entonces donde lo hago ?

Uso MS SQL Server 2005


Gracias


Juan Carlos Flores
Choluteca, Honduras


principiante wrote:

> > En niguna de ellas encuentro como proteger el borrado del grupo
> > debido a tener usuarios, lo que necesito es poder NEGAR el borrado
> > del grupo si hay usuarios referidos a el mediante fkGrupo en la
> > tabla de usuarios.
> >
> > Saludos y gracias por ayudarme.
>
>
> Si no me equivoco, creo que tienes un confusisn.
>
> Es que la relacisn de integridad hace justamente eso que quieres,
> por defecto.
>
> No tienes que configurar mas nada, sslo definir la relacisn de
> integridad pura y simplemente. Con eso te dara un error cuando
> trates de borrar un grupo que ya tiene usuarios relacionados. No es
> eso lo que quieres?
>
> De las acciones que hablas son para la actualizacisn en cascada de
> las claves foraneas. Eso es otra cosa.
>
>
> Jose TH






me respondo solo NO HAY QUE HACER NADA, es por eso justamente mi
confusion, empece por buscar que hacer, lo he dejado todo como estaba
en NO ACTION y listo, ahora si estan protegidos los datos.


Bueno, espero no se me olvide pronto y tenga que volver a preguntar.


Muchisimas gracias


Juan Carlos Flores
Choluteca, Honduras
Respuesta Responder a este mensaje
#14 principiante
21/08/2007 - 02:10 | Informe spam

me respondo solo NO HAY QUE HACER NADA, es por eso justamente mi
confusion, empece por buscar que hacer, lo he dejado todo como estaba
en NO ACTION y listo, ahora si estan protegidos los datos.


Bueno, espero no se me olvide pronto y tenga que volver a preguntar.


Muchisimas gracias






Te habia escrito eso de "No action" precisamente en el ultimo mensaje. Eso
era lo que trataba de explicarles que ese es el comportamiento por defecto
de una relacion de integridad.

En los libros en línea hay muchos mas detalles que te pueden servir para
profundizar en el tema.

Jose TH
Respuesta Responder a este mensaje
#15 Juan Diego Bueno
21/08/2007 - 06:48 | Informe spam
Vaya, entonces el que se ha equivocado he sido yo. No recordaba que el
propio SQL Server, por la propia relación, iba a impedir por sí solo el
borrado del grupo si tenía un registro relacionado. En el caso de que no,
iba a hacerlo tal cual. Se debe a que suelo utilizar el 99% el borrado o
actualización en cascada. Mil disculpas por crearte confusión, Juan Carlos


Juan Diego Bueno www.moondance.tk
"principiante" escribió en el mensaje
news:


me respondo solo NO HAY QUE HACER NADA, es por eso justamente mi
confusion, empece por buscar que hacer, lo he dejado todo como estaba
en NO ACTION y listo, ahora si estan protegidos los datos.


Bueno, espero no se me olvide pronto y tenga que volver a preguntar.


Muchisimas gracias






Te habia escrito eso de "No action" precisamente en el ultimo mensaje. Eso
era lo que trataba de explicarles que ese es el comportamiento por defecto
de una relacion de integridad.

En los libros en línea hay muchos mas detalles que te pueden servir para
profundizar en el tema.

Jose TH



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida