[Python] R: SQLITE Libri

2014-03-12 Per discussione Attilio Menegon
Ringrazio tutti per le indicazioni che mi avete dato,

Ho iniziato a vedere il tutorial in inglese, e altri minori in lingua italiana 
e fare degli esercizi 
http://wwwcdf.pd.infn.it/AppuntiLinux/a2761.htm#almltitle5609

Non ho ben capito perché in questi appunti hanno chiamato le tabelle relazioni, 
per me le relazioni sono quelle 1 a 1, 1 a molti e molti a molti.

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.

Mi potete dare una dritta nel comprendere questo passaggio.

Ringrazio nuiovamente tutti per la disponibilità. 

Attilio

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] R: SQLITE Libri

2014-03-12 Per discussione Daniele Varrazzo

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

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python