Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

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


  • From: Alvaro Herrera <alvherre(at)commandprompt(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: Tue, 31 Jul 2007 14:03:17 -0400
  • Message-id: <20070731180317.GF15602@alvh.no-ip.org> <text/plain>

jam1138 escribió:

> 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

Creo que lo mejor seria almacenar los tres identificadores por separado
(tres columnas), y crear una vista (CREATE VIEW) que haga la
concatenacion.  Asi puedes hacer el auto-incremental de manera sencilla,
usando una secuencia, y cuando llegue el fin de año haces un setval()
para que vuelva a 1.  Esto lo puedes programar usando crontab.

Lo de usar una vista te evita tener que hacer la concatenacion en el
codigo de la aplicacion, lo cual puede llegar a ser problematico.

Otra sugerencia es que guardes la cadena de 4 chars en una tabla
separada.  Asi te aseguras que los valores que se ingresen correspondan
al conjunto de valores permitidos (es decir debes tener una FK).  En la
tabla principal simplemente guardas un INT que seria la llave primaria
de la tabla de identificadores.  Ademas, eso es mas normalizado: si
algun dia quieres cambiar nombre a alguno de esos identificadores es
sencillo hacer un UPDATE sobre la tabla de identificadores.  El JOIN
entre la tabla de identificadores y la tabla principal seria parte de la
vista que te sugiero mas arriba.

El año es simplemente un entero más -- puedes usar DEFAULT
extract('year' from current_date) en el CREATE TABLE para que se ingrese
automaticamente.

> Con haberme explicado me doy por satisfecho... sigo agradeciendo su
> anterior ayuda, espero igual me den un empujoncito con esto.

Te explicas, asi que date por satisfecho :-P

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.



Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group