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

#21 Juan Diego Bueno
12/02/2007 - 13:29 | Informe spam
Mientras se puede usar la solución 99% declarativa (la de la UDF).
Pero el que no llora no mama. Si los programadores fuesen más
exigentes con las herramientas que usan, estas serían mejores.



En el caso en el que debo comprobar si los días asignados a cada
registro son coherentes a los días pendientes por coger de vacaciones,
la UDF finalmente no me ha servido (o quizás no haya sabido
implementarla). Es un poco complicado decirle que llame a una función
en la que está implicada la misma tabla que aplica la restricción (el
cálculo de los días pendientes se hace en base a los ya cogidos o a
los que se intentan coger) y funcione como debe.

Simplemente he recurrido a una vista que me devuelva un booleano si se
vulnera esta restricción. Es lo más que se puede hacer dadas las
circustancias, ya que incluso utilizando triggers el tema se complica.

Por cierto, gracias a Hernán y Alfredo por sus referencias a las bases
de datos temporales

Saludos
Respuesta Responder a este mensaje
#22 Hernan
12/02/2007 - 16:27 | Informe spam
> Mientras se puede usar la solución 99% declarativa (la de la UDF).
> Pero el que no llora no mama. Si los programadores fuesen más
> exigentes con las herramientas que usan, estas serían mejores.

En el caso en el que debo comprobar si los días asignados a cada
registro son coherentes a los días pendientes por coger de vacaciones,
la UDF finalmente no me ha servido (o quizás no haya sabido
implementarla). Es un poco complicado decirle que llame a una función
en la que está implicada la misma tabla que aplica la restricción (el
cálculo de los días pendientes se hace en base a los ya cogidos o a
los que se intentan coger) y funcione como debe.

Simplemente he recurrido a una vista que me devuelva un booleano si se
vulnera esta restricción. Es lo más que se puede hacer dadas las
circunstancias, ya que incluso utilizando triggers el tema se complica.



jejejeje... Bienvenido al club. Por ahora duele mucho pero con
el tiempo enseñarás orgulloso las cicatrices.

A propósito de la vista... ¿Has probado el caso en el que se lo que
se modifica es la fecha de fin? Peor aún, ¿la de inicio? ;-)
En los UPDATE tienes que quitar el registro a modificar del
conjunto de datos contra los que validar.

Por cierto, gracias a Hernán y Alfredo por sus referencias a las bases
de datos temporales



de nada. a propósito, como ya te habrás enterado, el enlace no es de
un documento es de un tocho digo un libro.

-H.
Respuesta Responder a este mensaje
#23 Juan Diego Bueno
12/02/2007 - 16:42 | Informe spam
A propósito de la vista... ¿Has probado el caso en el que se lo que
se modifica es la fecha de fin? Peor aún, ¿la de inicio? ;-)
En los UPDATE tienes que quitar el registro a modificar del
conjunto de datos contra los que validar.



Bueno, no se si te he entendido muy bien, pero creo que te refieres al
hecho de que los días dependan de ambas, fecha de inicio y de fin. No
es así... del todo, ya que los días los escoge el grabador (el
intervalo entre fechas en días se refiere a días laborales, y la única
comprobación que hago es que esos días sean menores o iguales a los
naturales entre esas dos fechas)

Como compruebo si se vulnera la restricción mediante esta vista, en
cualquier cambio de ambas tablas cuando ese flag cambie, tendrá que
ser la aplicación cliente, al tomar el valor de esa vista, la que se
queje y avise al usuario

> Por cierto, gracias a Hernán y Alfredo por sus referencias a las bases
> de datos temporales

de nada. a propósito, como ya te habrás enterado, el enlace no es de
un documento es de un tocho digo un libro.



Sí, por eso me veo obligado a posponer el estudio del tema. Lo he
mirado por encima y es algo... que hay que leérlo con calma, y tomarlo
en pequeñas dosis bien machacadito
Respuesta Responder a este mensaje
#24 Hernan
12/02/2007 - 18:41 | Informe spam
On 12 feb, 16:42, "Juan Diego Bueno" wrote:
> A propósito de la vista... ¿Has probado el caso en el que se lo que
> se modifica es la fecha de fin? Peor aún, ¿la de inicio? ;-)
> En los UPDATE tienes que quitar el registro a modificar del
> conjunto de datos contra los que validar.

Bueno, no se si te he entendido muy bien, pero creo que te refieres al
hecho de que los días dependan de ambas, fecha de inicio y de fin. No
es así... del todo, ya que los días los escoge el grabador (el
intervalo entre fechas en días se refiere a días laborales, y la única
comprobación que hago es que esos días sean menores o iguales a los
naturales entre esas dos fechas)

Como compruebo si se vulnera la restricción mediante esta vista, en
cualquier cambio de ambas tablas cuando ese flag cambie, tendrá que
ser la aplicación cliente, al tomar el valor de esa vista, la que se
queje y avise al usuario



Solo me refería al hecho de comprobar que no se ingrese un
período que se superponga con otro ya existente y que si
luego se actualiza uno de los ya ingresados que la modificación
no cree una superposición.

> > Por cierto, gracias a Hernán y Alfredo por sus referencias a las bases
> > de datos temporales

> de nada. a propósito, como ya te habrás enterado, el enlace no es de
> un documento es de un tocho digo un libro.

Sí, por eso me veo obligado a posponer el estudio del tema. Lo he
mirado por encima y es algo... que hay que leérlo con calma, y tomarlo
en pequeñas dosis bien machacadito



tampoco es necesario leerlo todo. además tiene un par de capítulos
relleno como las equivalencias entre distintos SQL.

en fin... que nos vamos de tema con repecto a C#. lo siento.

-H.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida