Hola. Muchas gracias por su tiempo.
Tengo un gran problema con SQL Server 2000 (versión en Inglés).
Mis tablas son estas: (USUARIOS y SOLICITUDES):
USUARIOS (
[LOGIN] [varchar] (10) NOT NULL ,
[NOMBRE] [varchar] (20) NOT NULL
)
en donde LOGIN es mi llave primaria.
El problema viene cuando trato de crear la tabla SOLICITUDES.
El funcionamiento de las solicitudes es el siguiente: un usuario digita la
solicitud para que sea guardada en la base de datos. Un par de días después,
otro usuario aprueba dicha solicitud. Esto me implica el usar en mi tabla
SOLICITUDES dos llaves foráneas referenciando a la tabla USUARIOS: una para
el usuario que digita y otra para el usuario que aprueba.
Pues esta es la porción de código para crear la tabla SOLICITUDES:
(nótese que el campo APROBADA_POR es una llave foránea que puede ser NULL ya
que en el momento de guardar la solicitud no existe el usuario que aprueba)
CREATE TABLE SOLICITUDES (
[ID] [numeric](5, 0) NOT NULL ,
[FECHA] [datetime] NOT NULL ,
[NOTAS] [varchar] (100) NOT NULL ,
[DIGITADA_POR] [varchar] (10) NOT NULL ,
[APROBADA_POR] [varchar] (10) NULL
) ON [PRIMARY]
GO
ALTER TABLE SOLICITUDES ADD
CONSTRAINT [PK__SOLICITUDES__07DE5BCC] PRIMARY KEY (
[ID]
) ON [PRIMARY]
GO
ALTER TABLE SOLICITUDES ADD
CONSTRAINT [FK__SOLICITUDES__DIG__15702E88] FOREIGN KEY (
[DIGITADA_POR]
) REFERENCES [USUARIOS] ( [LOGIN] ) ON UPDATE CASCADE ,
CONSTRAINT [FK__SOLICITUDES__APR__12742E08] FOREIGN KEY (
[APROBADA_POR] ) REFERENCES [USUARIOS] ( [LOGIN] ) ON UPDATE CASCADE
y el siguiente error ocurre:
Introducing FOREIGN KEY constraint 'FK__REQUESTS__APR__12742E08' on table
'REQUESTS' may cause cycles or multiple cascade paths. Specify ON DELETE NO
ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
Bien, luego de esto hice una nueva tabla llamada APROBACIONES con dos
campos: SOLICITUD_ID y APROBADA_POR para así no declarar el campo
APROBADA_POR (ni su constraint) en la tabla SOLICITUDES. Así cuando una
solicitud es aprobada, se crea un nuevo registro en APROBACIONES y listo.
Pero, cuando ejecuto el script me vuelve a dar el mismo error.
Yo realmente sé lo que SQL Server quiere decir con "ciclos" o "múltiples
rutas de cascada" y las relaciones circulares que pueden ocurrir. Pero siento
que en este caso no hay nada de eso. Lo que sucede es simplemente dos llaves
foráneas referenciando a la misma tabla.
Alguien podría ayudarme a saber qué sucede y cómo puedo solucionarlo?
Les agradezo muchísimo
Un saludo
Leer las respuestas