[Python] info su db

Daniele Varrazzo piro a develer.com
Mer 5 Mar 2014 17:21:25 CET


On 2014-03-05 11:16, Perini Matteo wrote:
> Ciao a tutti,
> dopo un po' di stallo riprendo la questione db con nuove domande.
> Prescindendo dal tipo di db scelto....
>
> Dovrei usare il db per immagazzinare tutte le info degli utenti, e
> fin qui non ci sono problemi.
> Ad ogni utente è assegnato un codice (ID) contenuto in una tessera
> con chip RFID.
> Ad ogni ingresso/uscita gli utenti devono passare la tessera su un
> lettore e in quel momento la data e l'ora devono essere immagazzinate
> da qualche parte nel db.
>
> Forse è una domanda stupida ma come è meglio creare la struttura
> della tabella per ottenere lo scopo?
> Ad es:
>
> ID | Nome | Cognome | Data e Ora | segni particolari | Ecc..
>
> e ogni volta che viene strisciata la tessera vado a fare un "append"
> al campo Data e Ora dell'utente?
>
> Può essere corretto?
>
> Meglio separare ingresso e uscita?
> tipo cosi:
>
> ID | Nome | Cognome | Data e Ora Ingresso | Data e Ora uscita | E'
> dentro? | segni particolari | Ecc..

Dovresti studiare qualcosa di molto elementare sui database: non puoi 
replicare informazioni su nome e cognome ad ogni strisciata, altrimenti 
è un log non relazionale, tanto vale tu lo scriva in un file. Le 
informazioni sugli utenti e le strisciate devono essere in due tabelle 
diverse.

Separare nome è cognome è un'idea regolare, ma un po' limitata (ho 
sempre l'esempio del mio collega che non ha il cognome). Avere sia data 
ingresso che data uscita nello stesso record è giustissima: se un record 
rappresenta un periodo devono essere riportati sia inizio che fine, 
usare "il record di prima" come inizio porta a complicazioni terribili. 
L'informazione "è dentro" può essere dedotta dal fatto che una presenza 
abbia la data uscita nulla.

Peraltro un utente non è collegato ad una lettura: un tag lo è, quindi 
secondo me dovresti avere come minimo:

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

Nota che una lettura è un evento imprescindibile: quella cosa è 
successa. Una "presenza" è una policy: mette in relazione due letture 
nel caso più normale ma potrebbero succedere cose strane: tipo uno che 
entra ed esce in modo imprevisto (in barella? o semplicemente il lettore 
era rotto?) per cui mi sembra giusto separare le Letture (da registrare) 
dalle Presenze (da ricostruire). Potresti anche avere quello che entra, 
passa il tag a quello dietro e quello entra anche lui: è vietato da una 
policy, non dalla fisica.


-- Daniele



Maggiori informazioni sulla lista Python