Newsgroup: it.comp.lang.delphi
Titolo: suggerimento circa database...

Allora...
...io devo registrare in una tabella (in un campo Blob) un segnale elettrico
(si tratta di un segnale ECG).
Ora... come tutti voi saprete un segnale ECG (elettrocardiogramma per
intenderci) avrà una data di inizio e una durata. Non ci sono limiti alla
durata... potrebbe essere una decina di secondi come 2 giorni.
Il mio problema è quindi quello di poter accedere in modo veloce ad una
parte di questo segnale (per visualizzarlo poi con TeeChart).
Avevo pensato di dividere il segnale in "spezzoni" di 10 secondi l'uno...
quindi per un segnale di 30 secondi la tabella conterrà tre record di 10
secondi l'uno. Ogni record avrà un campo Blob che contiene il segnale e un
campo Data/Ora. Ci sarà poi un altra tabella che sarà come "una mappa" per
rimettere tutto assieme del tipo "sequenza 1 = campione 1 + campione 2 +
campione 3 + etc" dove i vari "campioni" sono in realtà i record da 10
secondi di cui prima.
In questo modo dovrei cavarmela... ma vorrei sapere se qualcuno di voi ha
una idea migliore visto che non conosco database temporali per Delphi.
Bye,
   Luca

 secondi di cui prima.
Quale sarebbe la struttura della seconda tabella? non puoi avere un
numero di record variabile, e ad occhio non mi sembra efficiente mettere
gli id degli spezzoni di ecg in un blob.
Personalmente farei qualcosa tipo (in pseudo sql ;) )
Create Table EcgData (
  ID        Int64 Primary Key,
  EcgRec    Int64,     /* PK della tabella _principale_ */
  PosInSeq  Int32,     /* posizione nella registrazione */
  StartDt   TimeStamp, /* data/ora inizio spezzone */
  StopDt    TimeStamp, /* data/ora fine spezzone */
  NumSamp   Int32,     /* numero campionamenti dello spezzone */
  Sampls    BLOB       /* la registrazione del segnale */
);
Create Table EcgRec (
  ID        Int64 Primary Key,
  StartRec  TimeStamp, /* d/t inizio ecg */
  StopRec   TimeStamp, /* d/t fine ecg */
    /* volendo, anche i campi che seguono */
  NumSpezz  Int32,     /* numero di spezzoni della registrazione */
  NumSamp   Int64      /* numero campioni totali */
);
In questo modo, per ottenere gli spezzoni della registrazione
CheRegistrazione basta una
Select ID, PsInSeq from EcgData where EcgRec = :CheRegistrazione order
by PosInSeq;
da cui hai gli ID che ti servono per accedere ai BLOB (separatamente per
non doverli includere nella query di cui sopra).
Saluti
Paolo Arosio

 non doverli includere nella query di cui sopra).
Si... mi sono dimenticato di dire che l'utente deve poter fare un "collage"
di vari spezzoni (non chiedermi a cosa gli può servire, non lo so... ma non
voglio trovarmi con il sedere a terra in caso mi venga richiesto)...
inoltre... bé... l'utente deve poter aggiungere delle note sul grafico...
(lo so lo so... voglio troppo...).
Ciao,
   Luca
P.S.: grazie per la risposta.

 "Mappa2" i campioni 120,133,156,245,256 in sequenza.
Ma in questo modo per ciascun ECG hai n record nella tabella coi blob ed
n nella tabella dei riferimenti (ID Mappa non e' un candidato ad essere
PK, visto che non ha cardinbalita' 1): se un ecg e' una entita', e
risulta comodo avere come entita' anche gli spezzoni, mi pare un modello
piu' adeguato avere una tabella degli ecg (ciascuno identificato con una
PK) ed una tabella degli spezzoni (ciascuno con la sua PK); fra ecg e
spezzoni esistera' una relazione 1:n (e' il solito modello
master-detail).
Se non ti interessa che gli spezzoni siano entita' forti puoi evitare la
PK sugli spezzoni ed identificarli tramite ID dell'ECG + numero nella
sequenza; cmq imho e' opportuno che gli spezzoni siano identificabili
anche indipendentemente (abbiano cioe' una propria PK).
Saluti
Paolo Arosio

Grazie per i tuoi suggerimenti.
Ciao,
   Luca