Restricciones de Integridad N:M

20/04/2005 - 09:15 por javierperezllanera | Informe spam
Hola a todos,

Tengo tres tablas que están relacionadas entre si por N:M.

El caso, es que la primera tabla llamada EMPRESA, tiene vinculados N
RIEGOS, y cada uno de ellos a su vez tiene también vinculados N Fatores de
Riesgos...Para rizar el rizo, cada factor de riesgo tiene a su vez también
N Medidas preventivas.

Problema: Que la restricción de integridad por relación solo nos controla
eliminar de las tablas maestras y no de las N:M. Por ejemplo en el caso de
que eliminemos un RIESGO que tiene factores de riesgos vinculado la
restricción no falla.

¿Sabéis como solucionar este caso? Quizás una restricción CHECK???

Modelo..

tblEmpresas ->N tblEmpresaRiesgo N<- tblRiesgo ->N tblRiesgoNFactorRiesgo
N<- tblFactorRiesgo ->N tblFactorRiesgoNMedidaPreventiva N<-
tblMedidaPreventiva

Como podria hacer una restricción de cuando elimina un registro (por
ejemplo de la tabla tblEmpresaRiesgo una empresa) que compruebe existen
Riesgos asociados a esta empresa y estos a su vez Factores de riesgos y a
su vez medida preventivas.

Dado que no pueden quedar Factores de riesgos huérfanos de Riesgos, o
medidas huerfanas de factores.

Gracias!!!!

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
20/04/2005 - 13:55 | Informe spam
Javier,

La mejor manera de forzar las restricciones de integridad referencial es
usando restricciones de claves foraneas. Puedes usar en ellas las opciones ON
DELETE / ON UPDATE CASCADE para que SQL Server borre o actualize en cascada
las claves foraneas que referencian una primaria cuando esta es borrada o
actualizada.


AMB


"Javier" wrote:

Hola a todos,

Tengo tres tablas que están relacionadas entre si por N:M.

El caso, es que la primera tabla llamada EMPRESA, tiene vinculados N
RIEGOS, y cada uno de ellos a su vez tiene también vinculados N Fatores de
Riesgos...Para rizar el rizo, cada factor de riesgo tiene a su vez también
N Medidas preventivas.

Problema: Que la restricción de integridad por relación solo nos controla
eliminar de las tablas maestras y no de las N:M. Por ejemplo en el caso de
que eliminemos un RIESGO que tiene factores de riesgos vinculado la
restricción no falla.

¿Sabéis como solucionar este caso? Quizás una restricción CHECK???

Modelo..

tblEmpresas ->N tblEmpresaRiesgo N<- tblRiesgo ->N tblRiesgoNFactorRiesgo
N<- tblFactorRiesgo ->N tblFactorRiesgoNMedidaPreventiva N<-
tblMedidaPreventiva

Como podria hacer una restricción de cuando elimina un registro (por
ejemplo de la tabla tblEmpresaRiesgo una empresa) que compruebe existen
Riesgos asociados a esta empresa y estos a su vez Factores de riesgos y a
su vez medida preventivas.

Dado que no pueden quedar Factores de riesgos huérfanos de Riesgos, o
medidas huerfanas de factores.

Gracias!!!!







Respuesta Responder a este mensaje
#2 javierperezllanera
20/04/2005 - 14:50 | Informe spam
Hola Alejandro,

El mayor problema que las restriccines suceden entre dos tablas
relacionadas. Si te fijas en el modelo entre las tablas tblEmpresaRiesgo
y tblRiesgoNFactorRiesgo están relacionadas mediante la tabla tblRiesgo.
Es decir las relaciones de integridad es correcto, pero la relacion de la
logica del programa nos pide otra relacion máscomo explicaba en el
caso de borrar riesgos que tienen factores vinculados.

Desde la capa de negocio de la aplicacion podriamos crear esta logica,
pero buscamos crear las restricciones desde base de datos si es posbile..
Gracias!


Alejandro Mesa wrote:

Javier,

La mejor manera de forzar las restricciones de integridad referencial es
usando restricciones de claves foraneas. Puedes usar en ellas las opciones


ON
DELETE / ON UPDATE CASCADE para que SQL Server borre o actualize en cascada
las claves foraneas que referencian una primaria cuando esta es borrada o
actualizada.


AMB


"Javier" wrote:

> Hola a todos,
>
> Tengo tres tablas que està¡n relacionadas entre si por N:M.
>
> El caso, es que la primera tabla llamada EMPRESA, tiene vinculados N
> RIEGOS, y cada uno de ellos a su vez tiene también vinculados N Fatores de
> Riesgos...Para rizar el rizo, cada factor de riesgo tiene a su vez también
> N Medidas preventivas.
>
> Problema: Que la restricción de integridad por relación solo nos controla
> eliminar de las tablas maestras y no de las N:M. Por ejemplo en el caso de
> que eliminemos un RIESGO que tiene factores de riesgos vinculado la
> restricción no falla.
>
> ¿Sabéis como solucionar este caso? Quizà¡s una restricción CHECK???
>
> Modelo..
>
> tblEmpresas ->N tblEmpresaRiesgo N<- tblRiesgo ->N tblRiesgoNFactorRiesgo
> N<- tblFactorRiesgo ->N tblFactorRiesgoNMedidaPreventiva N<-
> tblMedidaPreventiva
>
> Como podria hacer una restricción de cuando elimina un registro (por
> ejemplo de la tabla tblEmpresaRiesgo una empresa) que compruebe existen
> Riesgos asociados a esta empresa y estos a su vez Factores de riesgos y a
> su vez medida preventivas.
>
> Dado que no pueden quedar Factores de riesgos huérfanos de Riesgos, o
> medidas huerfanas de factores.
>
> Gracias!!!!
>
>
>
>
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
20/04/2005 - 15:17 | Informe spam
Javier,

Como te dije, puedes usar la opcion ON DELETE / UPDATE CASCADE en la
restriccion de clave foranea. Te recomiendo que postees la definicion de las
tablas involucradas, incluyendo indices y relaciones de integridad para tener
una mejor idea de lo que tratas de decirnos.


AMB

"Javier" wrote:

Hola Alejandro,

El mayor problema que las restriccines suceden entre dos tablas
relacionadas. Si te fijas en el modelo entre las tablas tblEmpresaRiesgo
y tblRiesgoNFactorRiesgo están relacionadas mediante la tabla tblRiesgo.
Es decir las relaciones de integridad es correcto, pero la relacion de la
logica del programa nos pide otra relacion máscomo explicaba en el
caso de borrar riesgos que tienen factores vinculados.

Desde la capa de negocio de la aplicacion podriamos crear esta logica,
pero buscamos crear las restricciones desde base de datos si es posbile..
Gracias!


Alejandro Mesa wrote:

> Javier,

> La mejor manera de forzar las restricciones de integridad referencial es
> usando restricciones de claves foraneas. Puedes usar en ellas las opciones
ON
> DELETE / ON UPDATE CASCADE para que SQL Server borre o actualize en cascada
> las claves foraneas que referencian una primaria cuando esta es borrada o
> actualizada.


> AMB


> "Javier" wrote:

> > Hola a todos,
> >
> > Tengo tres tablas que està¡n relacionadas entre si por N:M.
> >
> > El caso, es que la primera tabla llamada EMPRESA, tiene vinculados N
> > RIEGOS, y cada uno de ellos a su vez tiene también vinculados N Fatores de
> > Riesgos...Para rizar el rizo, cada factor de riesgo tiene a su vez también
> > N Medidas preventivas.
> >
> > Problema: Que la restricción de integridad por relación solo nos controla
> > eliminar de las tablas maestras y no de las N:M. Por ejemplo en el caso de
> > que eliminemos un RIESGO que tiene factores de riesgos vinculado la
> > restricción no falla.
> >
> > ¿Sabéis como solucionar este caso? Quizà¡s una restricción CHECK???
> >
> > Modelo..
> >
> > tblEmpresas ->N tblEmpresaRiesgo N<- tblRiesgo ->N tblRiesgoNFactorRiesgo
> > N<- tblFactorRiesgo ->N tblFactorRiesgoNMedidaPreventiva N<-
> > tblMedidaPreventiva
> >
> > Como podria hacer una restricción de cuando elimina un registro (por
> > ejemplo de la tabla tblEmpresaRiesgo una empresa) que compruebe existen
> > Riesgos asociados a esta empresa y estos a su vez Factores de riesgos y a
> > su vez medida preventivas.
> >
> > Dado que no pueden quedar Factores de riesgos huérfanos de Riesgos, o
> > medidas huerfanas de factores.
> >
> > Gracias!!!!
> >
> >
> >
> >
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida