[Python] info su db
Daniele Varrazzo
piro a develer.com
Gio 6 Mar 2014 13:23:49 CET
On 2014-03-06 11:17, enrico franchi wrote:
> 2014-03-05 18:46 GMT+00:00 Daniele Varrazzo <piro a develer.com>:
>
>
>> Questa guerra di religione è probabilmente più vecchia sia di Emacs
>> che di
>> Vi :)
>>
>
> Ah, direi di no! I db relazionali sono relativamente recenti, almeno
> rispetto a vi.
vi è del 76, I db relazionali sono fatti originare da un articolo di
Codd del 1970 (fonte: wikipedia).
>> 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).
>>
>
> Il timestamp da solo, si. E' ovviamente non univoco (posso ampiamente
> avere
> due accessi allo stesso momento).
> Comunque se hai un db decente, puoi usare i tipi di dato appropriati.
Postgres è un db decente: così tanto che potrebbe definire un timestamp
con una precisione superiore a quella che può gestire un applicativo.
Stai facendo un discorso da manuale (neanche tutti), io sto parlando in
termini pratici. La tupla (lettore, tag, timestamp) è univoca, certo
(nota: tag, non utente). È una buona chiave primaria? Tu hai letto dei
libri che dicono di sì. Io ho letto dei libri che dicono di sì e dei
libri che dicono di no. Ho scritto dei programmi ed ho la mia opinione,
che è no, per la componente casuale della precisione con cui ogni
sistema definisce i timestamp, perchè ogni url o form di ogni pagina web
che devo generare sarà più complessa, e perchè ogni join è un dito al
cubo (essendo tre i campi). E questo senza menzionare ORM non dico
"scritti coi piedi" ma semplicemente non overingegnerizzati. Che magari
non uso ora, ma in futuro chissà, e le basi di dati sono fatte per
*sopravvivere* al codice: il tuo programma fra 5 anni magari non lo
userà nessuno ma i dati che ha generato saranno un asset importante e
altri programmi, che non sai con che tecnologia verranno scritti, li
useranno.
> E infatti io non parlavo di codice fiscale. Parlavo di employee ID,
> che per
> una serie di cose e' qualcosa che e' semanticamente significativo nel
> dominio applicativo.
> Non e' solo un artefatto del database...
L'"employee id" è un mito che esiste solo negli esempi con cui si
scrivono gli articoli di database su come si fanno i join, non esiste
nella realtà. Non ho lavorato in nessuna azienda che avesse un
identificativo decente per tutti gli impiegati. Anche gli irregolari che
fanno pulizia di tanto in tanto, anche l'amante dell'amministratore
delegato che passa alla fine della riunione del consiglio di
amministrazione, hanno un badge. La cosa più simile all'employee id è
l'id sequenziale che il database gli ha assegnato quando è stato immesso
nel sistema la prima volta.
> Il codice fiscale e' ovviamente una cattiva chiave (specie se non
> supponi
> di avere a che fare solo con italiani o residenti in italia).
Com'è che è così evidente in una ML amatoriale ma non per gli ingegneri
di Telecom? :)
>> 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.
>>
>
> Ma in questo caso una chiave e' ovvia. In un singolo istante, per un
> singolo lettore, puoi avere solo una lettura. Se pensi di non avere
> letture
> abbastanza granulari, puoi avere al limite anche la persona che ha
> badgato.
>
>
>> 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? :)
>
>
> Non e' questione di vincere.
(peccato, citazione mancata :)
> E non ci siamo solo noi. Ci sono anche quelli
> che iniziano: per queste persone e' forse una buona cosa sapere che
> se e'
> vero che MySQL supporta(va) il modello relazionale in modo
> tragicomico,
> questo non vuole dire che bisogna pensare il db con uno schema errato
> per
> forza: si puo' usare una tecnologia che lavora bene.
Vabbè passiamo a bashare la cosa che tutti amano bashare (ancora,
spesso comicamente senza sapere quello che dicono e pensando di essere
depositari di chissà che conoscenza). Ora ci sarà anche il coretto di
tutti gli iscritti che la sanno lunga e "+1" e "haha che cretini"...
MySql non l'ha nominato nessuno, non stiamo parlando di database buoni o
cattivi qui. Io uso Postgres e una chiave primaria tripla con dentro un
valore reale la considero un'idea abbastanza cattiva da meritare una
chiave surrogata, sebbene il database sia perfettamente in grado di
gestirla. Tu no? Ok, ma sono opinioni, non oro colato: quello che pensi
non è giusto "in assoluto". Per te ha dei vantaggi. Che peraltro non hai
ancora elencato: hai solo detto "si fa così", ma questo è un dogma: non
è così che si insegna a "quelli che iniziano". Si elencano i pro e i
contro. Qual'è il vantaggio concreto di usare la tripla secondo te?
-- Daniele
Maggiori informazioni sulla lista
Python