Re: Campo con entero variable según el año

From: "Neil Peter Braggio" <pbraggio(at)gmail(dot)com>
To: jam1138 <jam1138+pgsql(at)gmail(dot)com>
Cc: Lista PotsgreSQL-español <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Campo con entero variable según el año
Date: 2007-07-31 18:25:29
Message-ID: a722ba580707311125l1c7fd43cu1386c8b58bfc7df0@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

¿Pueden existir saltos entre los números de folios?, es decir, ¿se permite
tener registrados los siguientes códigos: GMAI/0001/2007, GMAI/0002/2007,
GMAI/0005/2007, GMAI/0007/2007, ........ ? (Nota que el GMAI/0003/2007,
GMAI/0004/2007, y GMAI/0006/2007 no se encuentran en la tabla)

Si no se permite, una posible solución sería la siguiente:

1.- Crear una secuencia en la base de datos.
1.- Desarrollar un componente dentro de tu aplicación que solo sea
instanciado una única vez (singleton) por los demas componentes ó
aplicaciones. Este componente al iniciar verificará cual es el último
registro insertado del año en curso para verificar que la secuencia se
encuentre correcta ó sincronizada, de lo contrario la ajustará.
3.- Cada vez que algún otro componente de tú aplicación necesite ingresar un
nuevo registro en esta tabla invocará a un método del componente anterior
(singleton) para que haga la tarea.

Esto garantiza que habrá un solo punto de ingreso de los registros, y que se
mantendrá el control de la codificación como lo esperas ya que todas las
operaciones concurrentes de escritura se harían de manera serial: una detrás
de la otra.

----
Neil Peter Braggio
pbraggio(at)gmail(dot)com

On 7/31/07, jam1138 <jam1138+pgsql(at)gmail(dot)com> wrote:
>
> A ver si esta vez sí logro explicarme con claridad, que ahora ni yo lo
> tengo muy claro.
>
> Estoy planteando una aplicación para manejar documentos a los cuales
> es necesario darles un seguimiento, para ello, dichos documentos
> manejan un identificador con un formato especificado:
>
> - Una cadena de 4 caracteres
> - Un entero que sirve como *número de folio* (irrepetible,
> auto-incremental)
> - Año en que se generó el documento
>
>
> Ok... mi idea para manejar esa información es la de solo almacenar en
> la base de datos lo que sería el folio del documento (el segundo dato)
> como un entero autoincremental, ya que ese es su comportamiento, y
> "componer desde afuera" (con el lenguaje de programación de la
> aplicación) el identificador. Creo no habría problema con ello, si
> alguien con mayor experiencia tiene una mejor idea, igual se agradece
> :-D...
>
> Pero bueno, mi duda esta en cómo hacer para que ese *campo numérico
> autoincremental* --que servirá como folio--, se resetée cuando cambie
> el año, que es el comportamiento que debe tener dicho identificador.
>
> Me explico con un ejemplo:
>
> El primer documento generado este año se identifica como
> GMAI/0001/2007, le sigue el GMAI/0002/2007 y así consecutivamente
> mientras dure el año, pero el primer documento generado en el 2008 se
> debe identificar como GMAI/0001/2008 y seguirle el GMAI/0002/2008 ,
> etc. etc. etc... es el dato de en medio al que me refiero, es un
> numérico autoincremental pero no es único (aparte tendré mi PK).
>
> Con haberme explicado me doy por satisfecho... sigo agradeciendo su
> anterior ayuda, espero igual me den un empujoncito con esto.
>
>
> --
> Aprendiz de todo, maestro de nada.
> http://download.bblug.usla.org.ar/netiquette.png
> --
> ---------------------------(fin del mensaje)---------------------------
> TIP 5: ¿Has leído nuestro extenso FAQ?
> http://www.postgresql.org/files/documentation/faqs/FAQ.html
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Andrés García G. 2007-07-31 19:48:41 ¿Como comprobar si un objeto (tabla, vista, etc) de la BD esta siendo utilizada por "X" usuario?
Previous Message Alvaro Herrera 2007-07-31 18:03:17 Re: Campo con entero variable según el año