como usar doble primary key?

185 views
Skip to first unread message

miko

unread,
Jun 29, 2012, 8:35:33 AM6/29/12
to publice...@googlegroups.com
hola amigos
tengo una base de datos postgres
 la columna idexpediente  de la tabla expediente se renueva desde 1 cada año, como puedo hacer que este id se vuelva 1 cuando comience un año nuevo?
o ponerle un doble primary key,
no se si me explique bien...

Alan Cybar

unread,
Jun 29, 2012, 9:15:47 AM6/29/12
to publice...@googlegroups.com
Para solucionar eso podrías crear la clave con el año+Id, por ejemplo: 20121 - 20122 - 20123 - 2012n.
para el año que viene 20131 - 20132 - 20133 - 2013n.

O usar una PK compuesta: id + año = PK

Saludos,

Alan

mpulla

unread,
Jun 29, 2012, 9:53:31 AM6/29/12
to publice...@googlegroups.com
Hola Miko.

Yo tendría un campo autonumerico que seria la llave primaria, ademas de esto crearia la llave compuesta que propone Cybar.

Saludos.
Mauricios

Guillermo MDQ

unread,
Jun 29, 2012, 10:13:53 AM6/29/12
to publice...@googlegroups.com
Yo tengo una que toma los dos digitos finales del año y le agrego el numero consecutivo adelante:

Para el año 2011:
   111
   211
   311
   411

para el año 2012

   112
   212
   312
   412
y asi sucesivamente, hasta el año 2099 te sirve, jaja

Saludos
Guillermo

Pablo Daniel Lissa

unread,
Jun 29, 2012, 10:29:46 AM6/29/12
to publice...@googlegroups.com
Jajaja. Es cierto. Cybar fue un poco más optimista. Usando los 4 dígitos del año, su primer método propuesto es funcional sin conflicto hasta el año 9999.

Guillermo, me llama la tención tu método. Suelo pensarlo al revés (primero el año, digamos). Te pregunto: ¿usás esa clave para filtrar consultas o almacenás el año en otro campo más de la tabla? Porque si lo usás, me parece que es más difícil recorrer el índice.

Saludos.
-----------------------------------------------------------------------------------------------------------------------------------

Guillermo MDQ

unread,
Jun 29, 2012, 10:41:01 AM6/29/12
to publice...@googlegroups.com
Ese campo lo uso como clave primaria en un sistema de documentos que me pidio un cliente para numerar los documentos que genera y de un vistazo saber en que año fue generado.
Igual guardo la fecha en otro campo.

Saludos
Guillermo

Luis Maria Guayan

unread,
Jun 29, 2012, 10:53:32 AM6/29/12
to publice...@googlegroups.com
No es recomendable usar datos del negocio para claves primarias, deberías utilizar claves subrrogadas como clave primaria, y los datos del negocio (año, expediente, código) como claves comunes.

Desconozco si PostgreSQL tiene el concepto de clave candidata para controlar la unicidad de la combinación que deseas realizar

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Carlos Miguel FARIAS

unread,
Jun 29, 2012, 5:47:41 PM6/29/12
to publice...@googlegroups.com
Coincido con Luis María. Postgresql soporta autoincremental (serial) y claves unicas multiplecampos (y campos con valores null) o sea que la unicidad la chequea solo si al campo le pones datos, si son null, no.
Eso por ejemplo te permite que en una tabla de clientes, si del cliente no conoces el documento, no cargas nada y ya esta, pero si le cargas el documento, que no se lo repitas con otro.
La clave única en los SGBD que conozco (no la de las nativas) son el equivalente a las candidatas cuando PROGRAMAMOS CON VISUAL FOXPRO
Saludos: Miguel, La Pampa (RA)

Luis Maria Guayan

unread,
Jun 30, 2012, 9:27:24 AM6/30/12
to publice...@googlegroups.com
Agrego a este hilo un muy buen artículo de Andy Kramek, traducido al español para PortalFox

-- ¿Qué es una clave? --
http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=168


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Reply all
Reply to author
Forward
0 new messages