[Python] R: Re: psycopg, cursori e connessioni: tenere occupato un id

Marco De Paoli depaolim a gmail.com
Mar 17 Maggio 2011 10:40:26 CEST


ehm, non sono sicuro di aver capito l'esigenza iniziale

forse il problema nasce dal volere usare l'identificativo numerico del ddt
anche come chiave primaria

...perché non tenere due campi distinti?

siano essi: id (vera e propria chiave primaria, tendenzialmente trasparente
all'utente), numero_documento (il numero che l'operatore vede e che viene
poi stampato sui report cartacei: quest'ultimo è quello che l'operatore
considera "numero del ddt")

in questo modo la chiave primaria id la puoi inizializzare/alimentare subito
con una sequence senza bisogno di lock o altro (meccanismo semplice ed
efficente, trovi un sacco di doc ...io ho presente oracle ma immagino che in
posgress il giro sia simile)

il ddt nasce in bozza, e tale rimane fintanto che l'operatore conferma i
dati e "registra" il ddt, solo a quel punto il ddt viene "battezzato" e
riceve un numero_documento univoco

in questo modo non hai il problema di assegnare degli id e poi doverli
revocare (e recuperare/riutilizzare) perché l'operatore cambia idea

L'unico problema che ti rimane è valorizare il campo numero_documento una
volta che l'operatore ha confermato. Beh, qui puoi usare il giro che ti è
già stato detto:
 * lock tabella
 * update set numero_documento=(select max(numero_documento)+1) where id =
 * commit

Da notare che il campo numero_documento può essere tranquillamente
classificato come unique su db. Infatti l'rdbms garantisce che il vincolo
sia soddisfatto esclusivamente sulle righe valorizzata. Questo significa che
puoi permetterti di tenere un numero arbitrario di ddt in bozza senza
fastidi. Sarà l'rdbms poi a garantire che se hanno un valore allora questo è
univoco (anche qui ho presente oracle ma immagino che per posgress sia lo
stesso)

spero di essere stato chiaro, altrimenti chiedi
Marco

2011/5/17 Daniele Varrazzo <piro a develer.com>

> On Tue, 17 May 2011 08:32:46 +0200 (CEST), "marcofoc a libero.it"
> <marcofoc a libero.it> wrote:
> > La notte mi sa che ha portato consiglio.
>
> [snip di deliri con 3 tabelle da tenere in sync]
>
> Meglio se mangi più leggero a cena.
>
>
> --
> Daniele Varrazzo - Develer S.r.l.
> http://www.develer.com
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20110517/6f147f2d/attachment-0001.html>


Maggiori informazioni sulla lista Python