[Python] Applicazione WEB con Python e Postgresql

Giovanni Porcari giovanni.porcari a softwell.it
Mer 24 Set 2014 09:37:50 CEST


> Il giorno 24/set/2014, alle ore 00:26, Enrico Bianchi <enrico.bianchi a ymail.com> ha scritto:
> 
> On 09/23/2014 05:32 PM, Marco Fochesato wrote:
>> Si infatti, per "sentirmi stretto", parlavo di quello: perchè deve esserci per forza na colonna id??
> 
> Se intendi "perche` deve esserci per forza una chiave primaria", il motivo e` che permette una ricerca piu` veloce (nonche` univoca) dei record presenti sulla tabella. In teoria questo non e` vincolante (basta fare gli indici nella maniera corretta), ma e` comunque una buona norma.
> Se invece intendi "perche` deve esserci per forza una chiave primaria numerica e incrementante", questo e` un grosso dibattito nel mondo dei database, ovvero ci sono persone che preferiscono una colonna autoincrementante mentre ci sono persone che preferiscono una chiave identificativa. I primi portano come argomentazioni piu` o meno quelle di Carlos (in teoria ne vedo solo una valida), mentre i secondi portano come argomentazione l'univocita` (nonche` identificabilita`) del record. Personalmente sono a favore della chiave primaria identificativa, soprattutto in virtu` che nelle fact tables permette estrazioni piu` veloci (non devo fare JOIN con le tabelle padri), ma tieni conto che molto dipende da quello che devi e come lo vuoi fare


Laddove non ci sia una chiave naturale assolutamente univoca e immutabile,
(ad esempio in una tabella di elementi la chiave 'K' identifica benissimo
il potassio)noi usiamo sempre un id di 22 caratteri univoco basato su uuid.
La ragione per cui non usiamo un seriale è che nel caso si debbano unire i
dati di tabelle provenienti da sistemi diversi la probabilità di avere
duplicati è irrisoria. Nel caso invece di un serial si è costretti a
assegnare nuovamente l'id ai record importati e se l'import riguarda anche 
tabelle in relazione il problema non è banalissimo.
Non credo che in termini di velocità sulle macchine moderne le prestazioni
per accedere ad un btree siano in qualche modo un problema mentre la
trasportabilità dei grappoli di tabelle è un vantaggio notevole.


G





Maggiori informazioni sulla lista Python