[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