[Torte] Temporal database in linux

Federico Di Gregorio fog a initd.org
Ven 10 Lug 2009 10:38:05 CEST


Il giorno ven, 03/07/2009 alle 13.51 +0200, Antonio Limone ha scritto:
> On Friday 03 July 2009 13:30:54 Federico Di Gregorio wrote:
[snip]
> > Ho letto l'entry su wikipedia di Temporal Database e, sinceramente, mi
> > sembra sia banalmente implementabile a livello applicativo. Sinceramente
> > non capisco perché _uno_ degli aspetti dello schema (il tempo) debba
> > venire trattato in maniera privilegiata. Certo è comodo non dover
> > prevedere espressamente alcune colonne per gestire una certa tipologia
> > di operazioni ma secondo me la comodità non vale la fatica.
> 
> Il tempo e' quello che permette di tenere traccia della storia di un record 
> (per esempio). I problemi arrivano quando, usando un db relazionale, si cerca 
> di ottenere una tabella di tipo valid-time (per esempio). Come anche si vede 
> su wikipedia si aggiungono due campi di tipo data (valid start time e valid 
> end time) ad una tabella non-temporale. Fino a qui e' facile. La chiave 
> primaria della tabella non temporale non va piu' bene: bisogna aggiungere uno 
> dei due nuovi campi alla chiave primaria. A questo punto anche le foreign-key 
> che si riferiscono a questa tabella devono essere modificate ma come? Non credo 
> che usando sql di un db relazionale si possa fare: forse l'unica soluzione e' 
> implementare una funzione che faccia il check sul vincolo...

C'ho meditato un po'. In effetti è molto interessante ma secondo me non
ha senso realizzare un nuovo tipo di database apposta. Per esempio,
potremmo estendere lo stesso concetto alla posizione geografica del dato
e allora cosa facciamo, scriviamo un Georeferential Database? E se
vogliamo il tempo *E* la posizione? Il problema del risolvere un
problema di dominio a livello così basso è che rendi il tutto
estremamente rigido. Quindi resto convinto che la soluzione migliore sia
di applicare questi concetti a livello applicativo sulla base flessibile
di un database relazionale "normale".

Oppure, ancora meglio, utilizzare un database dove i tipi di dato (e
quindi le relazioni) sono estendibili e definire di volta in volta i
tipi appropriati. Per esempio potresti utilizzare PostgreSQL e scrivere
un tipo di dato "temporal_reference" che è una tripla di valori (id,
start, end) e ridefinendo opportunamente gli operatori di confronto
utilizzarlo per creare relazioni "temporali" come quelle che hai
descritto.

federico

-- 
Federico Di Gregorio                         http://people.initd.org/fog
Debian GNU/Linux Developer                                fog a debian.org
INIT.D Developer                                           fog a initd.org
 Io non sono romantica. La candelina sul tavolo mi vede e si spegne.
                                                      -- sisterconfusion
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        non disponibile
Tipo:        application/pgp-signature
Dimensione:  197 bytes
Descrizione: Questa è una parte del messaggio firmata digitalmente
URL:         <http://lists.initd.org/pipermail/torte/attachments/20090710/bd1e7313/attachment.pgp>


Maggiori informazioni sulla lista Torte