Al hilo del hilo de "Programo bien?": Programación declarativa

09/02/2007 - 12:19 por Juan Diego Bueno | Informe spam
Hola gente:

A propósito de esas polémicas que surgen constantemente en este
grupo... y tratando de hacer las cosas como se plantean en muchos de
los posts, me encuentro ante una serie de dudas en la creación de una
tabla del proyecto en el que estoy. Me gustaría saber como puedo
resolver declarativamente esta situación ( y pido perdón de antemano
por no haberme documentado más, pero es que no se por donde empezar, y
solo necesito un punto de partida)

Se trata de crear una tabla que va a guardar las vacaciones del
personal. Muchas de las situaciones ya están declaradas en
constraints, como cuidar que los intervalos de fechas sean correctos,
y otras asignaciones a campos, pero hay dos situaciones que no se como
resolver declarativamente. Son las siguientes:

1. La tabla va a tener dos claves principales, el NIF de la persona, y
la fecha de inicio del periodo vacacional. También se guarda la fecha
fin. ¿Cómo puedo hacer que no haya incongruencia entre los diferentes
registros?. Es decir, para que un empleado al insertar un intervalo de
fechas, no se solape con otro ya existente en esa misma tabla

2. En otra tabla se almacenan el número de días de vacaciones a los
que tiene derecho el personal. Por lo tanto, necesito que la suma de
días solicitados en esta tabla, no superen los días que ese personal
tiene asignado.

Para ambas situaciones, evidentemente, puedo utilizar SPs y triggers,
los cuales son eminentemente procedimentales, pero dada la premisa que
se ha planteado de hacer declarativamente lo más posible... ¿cómo
puedo resolver estas dos situaciones de esa forma?

Gracias de antemano

Saludos

Preguntas similare

Leer las respuestas

#1 Carlos
09/02/2007 - 13:42 | Informe spam
El mismo select que meterias al trigger busca la manera de meterlo a un
check constraint si la base de datos te lo permite si no hazte una funcion
de usuario que devuelva un logico y metela al constraint pero pronto los
geniecillos te diran que una funcion no es un sp.

No se porque no le preguntaste directamente a tu maestrico Novoa, pensaba
que eras su empleado igual que Calvelito.

X-DDDD



"Juan Diego Bueno" escribió en el mensaje
news:
Hola gente:

A propósito de esas polémicas que surgen constantemente en este
grupo... y tratando de hacer las cosas como se plantean en muchos de
los posts, me encuentro ante una serie de dudas en la creación de una
tabla del proyecto en el que estoy. Me gustaría saber como puedo
resolver declarativamente esta situación ( y pido perdón de antemano
por no haberme documentado más, pero es que no se por donde empezar, y
solo necesito un punto de partida)

Se trata de crear una tabla que va a guardar las vacaciones del
personal. Muchas de las situaciones ya están declaradas en
constraints, como cuidar que los intervalos de fechas sean correctos,
y otras asignaciones a campos, pero hay dos situaciones que no se como
resolver declarativamente. Son las siguientes:

1. La tabla va a tener dos claves principales, el NIF de la persona, y
la fecha de inicio del periodo vacacional. También se guarda la fecha
fin. ¿Cómo puedo hacer que no haya incongruencia entre los diferentes
registros?. Es decir, para que un empleado al insertar un intervalo de
fechas, no se solape con otro ya existente en esa misma tabla

2. En otra tabla se almacenan el número de días de vacaciones a los
que tiene derecho el personal. Por lo tanto, necesito que la suma de
días solicitados en esta tabla, no superen los días que ese personal
tiene asignado.

Para ambas situaciones, evidentemente, puedo utilizar SPs y triggers,
los cuales son eminentemente procedimentales, pero dada la premisa que
se ha planteado de hacer declarativamente lo más posible... ¿cómo
puedo resolver estas dos situaciones de esa forma?

Gracias de antemano

Saludos
Respuesta Responder a este mensaje
#2 Juan Diego Bueno
09/02/2007 - 14:13 | Informe spam
Gracias por la respuesta, Carlos (por la primera parte, la segunda es
perfectamente prescindible). Desde luego, es válida para lo que busco
aunque no se si es 100% declarativa ( y sí, efectivamente, la idea es
que contestara cualquiera de los que defienden este criterio, para ver
si en este caso, se puede aplicar y cómo), con lo cual, se admiten
nuevas propuestas.

Saludos

On 9 feb, 13:42, "Carlos" wrote:
El mismo select que meterias al trigger busca la manera de meterlo a un
check constraint si la base de datos te lo permite si no hazte una funcion
de usuario que devuelva un logico y metela al constraint pero pronto los
geniecillos te diran que una funcion no es un sp.

No se porque no le preguntaste directamente a tu maestrico Novoa, pensaba
que eras su empleado igual que Calvelito.

X-DDDD

"Juan Diego Bueno" escribió en el mensajenews:
Hola gente:

A propósito de esas polémicas que surgen constantemente en este
grupo... y tratando de hacer las cosas como se plantean en muchos de
los posts, me encuentro ante una serie de dudas en la creación de una
tabla del proyecto en el que estoy. Me gustaría saber como puedo
resolver declarativamente esta situación ( y pido perdón de antemano
por no haberme documentado más, pero es que no se por donde empezar, y
solo necesito un punto de partida)

Se trata de crear una tabla que va a guardar las vacaciones del
personal. Muchas de las situaciones ya están declaradas en
constraints, como cuidar que los intervalos de fechas sean correctos,
y otras asignaciones a campos, pero hay dos situaciones que no se como
resolver declarativamente. Son las siguientes:

1. La tabla va a tener dos claves principales, el NIF de la persona, y
la fecha de inicio del periodo vacacional. También se guarda la fecha
fin. ¿Cómo puedo hacer que no haya incongruencia entre los diferentes
registros?. Es decir, para que un empleado al insertar un intervalo de
fechas, no se solape con otro ya existente en esa misma tabla

2. En otra tabla se almacenan el número de días de vacaciones a los
que tiene derecho el personal. Por lo tanto, necesito que la suma de
días solicitados en esta tabla, no superen los días que ese personal
tiene asignado.

Para ambas situaciones, evidentemente, puedo utilizar SPs y triggers,
los cuales son eminentemente procedimentales, pero dada la premisa que
se ha planteado de hacer declarativamente lo más posible... ¿cómo
puedo resolver estas dos situaciones de esa forma?

Gracias de antemano

Saludos
Respuesta Responder a este mensaje
#3 Alfredo Novoa
09/02/2007 - 15:20 | Informe spam
On 9 Feb 2007 05:13:21 -0800, "Juan Diego Bueno"
wrote:

Gracias por la respuesta, Carlos (por la primera parte, la segunda es
perfectamente prescindible). Desde luego, es válida para lo que busco
aunque no se si es 100% declarativa



Meter la consulta en el "Check" es 100% declarativo.


Saludos
Respuesta Responder a este mensaje
#4 Hernan
09/02/2007 - 16:54 | Informe spam
Lo que quieres modelar es una tabla con la variable tiempo.
Tiene truco y mucho. Desgraciadamente, y a pesar de que
hace 20 años se conoce el problema, los proveedores de BD
han hecho casi nada.

Si es la primera vez que te enfrentas con un problema así, antes que
nada
te recomiendo que *NO* pienses que las columnas FECHA_INI y FECHA_FIN
(o como las hayas llamado) son como cualquier otra del modelo.

Busca en la web sobre "Temporal Databases" que se ha escrito mogollón
al respecto (*). No trates de reinventar la rueda porque te vas a
estrellar.

Lo verdaderamente divertido comienza cuando el resto de tus entidades
le
empiezan a crecer estas dos columnitas. Por ejemplo: que los
intervalos
de vacaciones estén dentro del intervalo de alta del empleado y así.

Je... En este caso, decidir si usas CHECK o triggers para manterner
la consistencia de los datos será el MENOR de tus problemas.

Saludos,
-H.

(*) Si estás usando un gestor de los "normalitos" te recomiendo:
http://www.cs.arizona.edu/people/rts/tdbbook.pdf


Gracias por la respuesta, Carlos (por la primera parte, la segunda es
perfectamente prescindible). Desde luego, es válida para lo que busco
aunque no se si es 100% declarativa ( y sí, efectivamente, la idea es
que contestara cualquiera de los que defienden este criterio, para ver
si en este caso, se puede aplicar y cómo), con lo cual, se admiten
nuevas propuestas.

Saludos

On 9 feb, 13:42, "Carlos" wrote:

> El mismo select que meterias al trigger busca la manera de meterlo a un
> check constraint si la base de datos te lo permite si no hazte una funcion
> de usuario que devuelva un logico y metela al constraint pero pronto los
> geniecillos te diran que una funcion no es un sp.

> No se porque no le preguntaste directamente a tu maestrico Novoa, pensaba
> que eras su empleado igual que Calvelito.

> X-DDDD

> "Juan Diego Bueno" escribió en el mensajenews:
> Hola gente:

> A propósito de esas polémicas que surgen constantemente en este
> grupo... y tratando de hacer las cosas como se plantean en muchos de
> los posts, me encuentro ante una serie de dudas en la creación de una
> tabla del proyecto en el que estoy. Me gustaría saber como puedo
> resolver declarativamente esta situación ( y pido perdón de antemano
> por no haberme documentado más, pero es que no se por donde empezar, y
> solo necesito un punto de partida)

> Se trata de crear una tabla que va a guardar las vacaciones del
> personal. Muchas de las situaciones ya están declaradas en
> constraints, como cuidar que los intervalos de fechas sean correctos,
> y otras asignaciones a campos, pero hay dos situaciones que no se como
> resolver declarativamente. Son las siguientes:

> 1. La tabla va a tener dos claves principales, el NIF de la persona, y
> la fecha de inicio del periodo vacacional. También se guarda la fecha
> fin. ¿Cómo puedo hacer que no haya incongruencia entre los diferentes
> registros?. Es decir, para que un empleado al insertar un intervalo de
> fechas, no se solape con otro ya existente en esa misma tabla

> 2. En otra tabla se almacenan el número de días de vacaciones a los
> que tiene derecho el personal. Por lo tanto, necesito que la suma de
> días solicitados en esta tabla, no superen los días que ese personal
> tiene asignado.

> Para ambas situaciones, evidentemente, puedo utilizar SPs y triggers,
> los cuales son eminentemente procedimentales, pero dada la premisa que
> se ha planteado de hacer declarativamente lo más posible... ¿cómo
> puedo resolver estas dos situaciones de esa forma?

> Gracias de antemano

> Saludos
Respuesta Responder a este mensaje
#5 Juan Diego Bueno Prieto
09/02/2007 - 16:55 | Informe spam
Gracias por la respuesta, Carlos (por la primera parte, la segunda es
perfectamente prescindible). Desde luego, es válida para lo que busco
aunque no se si es 100% declarativa



Meter la consulta en el "Check" es 100% declarativo.



Como, que yo sepa, SQL Server no permite añadir a una constraint check el
resultado devuelto por una consulta ¿Aceptamos resultado devuelto por una
función como declarativo en lugar de procedimental? A eso me refería yo con
lo de no parecerme 100% procedimental


Estoy utilizando la versión gratuita de SPAMfighter para usuarios privados.
Ha eliminado 5435 correos spam hasta la fecha.
Los abonados no tienen este mensaje en sus correos.
¡Pruebe SPAMfighter gratis ya!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida