[Python] info su db
Daniele Varrazzo
piro a develer.com
Mer 5 Mar 2014 19:46:11 CET
On 2014-03-05 17:05, enrico franchi wrote:
> 2014-03-05 16:21 GMT+00:00 Daniele Varrazzo <piro a develer.com>:
> Utente: id, nome, cognome, indirizzo ecc..
> Tag: id (del db, forse non necessario), identificativo (quello che il
> lettore legge), emesso il, ritirato il, motivo del ritiro ecc.
> Utente per tag: quale utente, quale tag, da quando l'ha avuto, fino a
> quando l'ha avuto.
> Lettura: id, quale tag, quale lettore, a che ora.
> Presenza: id lettura in, id lettura out.
> Lettore: id, ...tutte le informazioni che servono
>
> Io andrei piano con tutti questi id. Quando c'e' un ID naturale,
> niente da
> dire (e.g., employee id).
> Pero' mettere gli ID per non usare chiavi primarie "vere", non mi
> piace
> tanto. Tipicamente un evento di lettura e' verosimilmente
> identificato
> univocamente da utente, ora, verosimilmente quale lettore lo ha
> fatto.
Questa guerra di religione è probabilmente più vecchia sia di Emacs che
di Vi :)
La penso come te: se vedi nei miei esempi ho dato un forse a mettere
l'id su un tag. Non conosco la tecnologia, ma probabilmente
l'identificativo pubblico è sufficiente.
Ma il resto no: la tupla (id tag, id lettore, timestamp) non è pratica
come chiave di una Lettura. Hai già bisogno di 6 campi per linkare due
letture ad una Presenza, in più un timestamp è (praticamente) un valore
reale, non discreto, e si presta male come identificativo (magari in
postgres ha un numero di usec intero, poi passa attraverso python che lo
converte in virgola mobile, fai una seconda query e ci scappa un
arrotondamento di un milionesimo di secondo che te lo fa mancare).
Sono favorevoli alle chiavi naturali, ma quando siano *veramente*
univoche. Il che è più raro di quello che sembra. Una targa non
identifica abbastanza bene un'auto (come feci in uno dei primi programmi
che scrissi, e i venditori si sovrascrivevano a vicenda le auto da
rendere nei preventivi, perché quando il cliente non ricordava a memoria
la targa scrivevano tutti "NON"...). Non sono neanche univoche, come
sanno quelli con targa "CD ... .." che beccano le multe al posto di
quelli del Corpo Diplomatico (che sono uguali ma scritte in blu...). Un
codice fiscale non identifica abbastanza bene una persona: puoi non
conoscerlo, può non averlo... Allo stesso modo sono favorevole alle
chiavi multiple, ma quando siano pratiche: in una tabella di unione
molti-a-molti non ho problemi ad usare la coppia di pkey come pkey, ma
non butto il sangue a cercarne una quando non è ovvia.
Chiavi naturali/surrogate e chiavi singole/multiple sono battaglie già
combattute e di cui si sa che non c'è vincitore. Che ne dici di una
bella partita a scacchi? :)
-- Daniele
Maggiori informazioni sulla lista
Python