[Python] R: SQLITE Libri

Daniele Varrazzo piro a develer.com
Mer 12 Mar 2014 14:27:37 CET


On 2014-03-12 11:59, Attilio Menegon wrote:

> Ho capito come si definisce la chiave primaria di una tabella,
> viceversa non mi è ben chiaro come funziona l'indice, io abitualmente
> in access quando ho bisogno di  una chiave primaria univoca, la
> dichiaro come contatore univoco senza duplicati possibili.

La chiave primaria è un dato obbligatorio e distinto per ogni record, 
che serve a rendere ogni record individuabile, quindi a dare un modo per 
referenziarlo (in una query o da un'altra tabella). Un contatore è un 
modo tipico di realizzare una chiave primaria: quando non è chiaro come 
individuare univocamente ogni record puoi aggiungere un contatore.

L'indice è solo una struttura per ottimizzare l'accesso: puoi avere 
indici su diversi campi. Grazie ad un indice puoi trovare un record in 
un tempo o(log(n)) invece che o(n) (la differenza tra cercare un numero 
di telefono in una rubrica che ha i nomi in ordine alfabetico comparata 
ad una rubrica che ha i nomi in ordine casuale). Se hai una tabella 
(nome, numero di telefono) puoi avere un indice sul nome, che ti 
permette di trovare velocemente il numero di telefono, ma se vuoi puoi 
creare anche un indice sul numero di telefono, che ti permetterebbe di 
rispondere velocemente alla domanda "di chi è questo numero?", senza 
scorrere tutta la tabella.

Visto che la chiave primaria è un modo tipico di accedere ad un record 
nella tabella è tipico che ci venga definito un indice sopra: in questo 
modo cercare record per chiave primaria è efficiente. Access lo crea di 
default, come anche Postgres e penso molti altri database.

Quindi, in quello che access ti propone (contatore+chiave 
primaria+indice) ci sono tre concetti relativamente indipendenti ma che 
si aiutano a vicenZa: una chiave primaria ti permette di trovare un 
record in maniera univoca, un indice di trovarlo in maniera efficiente, 
un contatore di implementare una chiave primaria in mancanza di meglio. 
Puoi anche avere chiavi primarie che non siano dei contatori (per 
esempio in una tabella di valute il codice internazionale EUR, GBP ecc. 
è ottimo e non serve un contatore). Allo stesso modo, per velocizzare 
certe query, puoi avere indici su qualunque campo, anche uno che non sia 
univoco o completo (due vincoli che sono necessari perché un campo possa 
essere usato come chiave primaria).

-- Daniele



Maggiori informazioni sulla lista Python