• User Newbie

    Gestione tabella con scadenze

    Salve.
    Vi scrivo per chiedervi aiuto sul miglior modo per sviluppare un'applicazione web che sto realizzando (php & mysql) dove si devono gestire dei record che contengono una data scadenza.

    I record sono visualizzati in una pagina html ed è possibile modificarli inserendo una data di chiusura. A questo punto i record chiusi saranno visibili in un'altra pagina che raccoglie tutti i record chiusi.

    Fino a qui l'implementazione è facile..

    Il problema nasce perchè devo gestire record per i quali la scadenza è ripetitiva, cioè non semplicemente solo del tipo "entro un mese" ma anche per esempio "ogni mese". Per questi record ripetitivi devo inoltre registrarne la loro storia (ogni nuova scadenza e la rispettiva chiusura) e devono avere un campo (il titolo) che deve essere unico.

    Lo stato dei record è gestito da due colonne di tipo boolenano per "chiuso" e "ripetitivo".
    Ragionando un po' ho pensato a tre possibili soluzioni praticabili, ognuna con pro e contro.

    1. Aggiungere una tabella con riferimento alla tabella principale dove salvare le scadenze ripetitive.
      PROBLEMI: gestire 2 tabelle per la visualizzazione dei record chiusi. Dover ogni volta azzerare il record "padre".

    2. Salvare anche i record non ripetitivi nella nuova tabella del punto 1
      PROBLEMI: duplicazione delle informazioni. record attivi e record chiusi in tabelle distinte. Dover ogni volta azzerare il record ripetitivo "padre".

    3. Tutto nella tabella principale con tanti record ripetitivi "gemelli"
      PROBLEMI: aggiungere una colonna con un identificatore per distinguere i record gemelli. Ad ogni chiusura creare un nuovo record gemello.

    Mi scuso se ho scritto troppo e spero di essere stato abbastanza chiaro..

    Secondo il mio ragionamento a questo punto la migliore soluzione sembra la 3, ma non mi convince a pieno..
    Spero possiate farmi un po' di luce o magari suggerirmi una soluzione più pratica.

    Grazie!
    Carlo


  • Consiglio Direttivo

    Ciao Carlod e benvenuto nel Forum GT. 🙂

    Solo per chiarirmi le idee intanto che penso a quale potrebbe essere la soluzione ottimale:
    Hai più tipologie di "ripetitività" (ogni 1 mese, ogni 1 anno, ogni 1 settimana) o solo "ogni 1 mese"?
    🙂


  • User Newbie

    Ciao e grazie..

    Rispetto alla tua domanda, SI ogni record ha la sua ripetitività.

    Ad essere sincero le cose sono un po' più complicate ma la soluzione può poi essere ampliata per la complessità del mio modello.

    Dettagliando quindi ci sono altre due colonne di scadenze ed ogni record può averne 1, 2 o tutte e tre.

    Immagina come esempio di dover gestire l'uso di un'automobile. Questa può avere scadenze (anche ripetitive) in base al tempo d'uso, ai km percorsi ed al numero di tragitti effettuati.

    Quindi un esempio concreto potrebbe essere: "mettere benzina ogni 500 km", oppure "cambiare guidatore ogni 4 ore" o infine "sostituire i pneumatici ogni 60.000 km o 2 anni, quale arrivi prima"

    Spero di averti chiarito meglio le idee.

    Ti ringrazio per l'aiuto e dimmi se serve altro.

    Carlo


  • Consiglio Direttivo

    Spero di aver compreso.
    "A peso" ti consiglierei la seguente modalità, ovviamente valuterai tu che conosci il tipo di dati da maneggiare con il codice, se fattibile, utilizzando timestamp per le date e numeri per i "km", rifacendomi all'esempio dell'auto.

    Creerei una tabella per le tipologie di ripetitività che non siano date (perché per le date, a parte il giorno, la settimana o la quindicina, non puoi stabilire un timestamp univoco da sommare):
    id | numero
    T1 | 10000 (T1=tagliando dei 10000 Km; 10000=numero di Km per la successiva ricorrenza)
    T2 | 20000 (T2=tagliando completo dei 20000 Km; 20000= numero km per successiva ricorrenza)
    .....|.....

    Per le date potresti mettere d=giornaliera (86400 secondi), s=settimanale (604800 secondi), q=quindicinale (1296000 secondi), m=mensile inteso come 1 mese e non 30 gg. (ti elabori la data tramite date() e quindi aumenti il valore del mese e ti risalvi il relativo valore in timestamp), etc etc.

    Cosa che comunque puoi gestire totalmente con un file, ma se hai in futuro la necessità di variare agevolmente questi dati, sarebbe meglio inserirli in una tabella apposita.

    Nella tabella primaria inserirai un campo con le tipologie di ripetitività, che volendo potrebbero essere anche più di una, ti basterà inserirli nel campo con un separatore univoco, anche il semplice trattino volendo.

    Al verificarsi "del fatto" (la macchina che entra in officina per un tagliando) immetterai i dati di confronto (km tagliando, data tagliando, data cambio gomme, etc etc) e provvederai ad aggiornare questi dati secondo il codice/i codici di ripetitività che avrai assegnato ai record.

    Se ho capito male, ed "il fatto" accade in automatico, ti basterà eseguire un auto upgrade al raggiungimento della ricorrenza, utilizzando i codici ricorrenza da te inseriti.

    🙂


  • User Newbie

    Devo ammettere che ho capito poco..
    Sarà la mia scarsa esperienza nel settore specifico.. :mmm:

    Usare delle tabelle di riferimento purtroppo non penso mi convenga perchè le scadenze sono veramente varie e poi per le date posso avere anche delle scadenze tipo "entro il 15/01/2010".
    Ma comunque questo non è un grosso problema. Ogni record ha il valore esatto delle scadenze invece che il riferimento alla tabella delle tipologie.

    La creazione dei record e la chiusura è demandata all'utente e non in modo automatico. Quindi sta a lui inserire i valori limite e i valori di chiusura. Nel caso si superino i limiti, verrà soltanto evidenziato il gap negativo nella pagina dei record chiusi.

    Al verificarsi "del fatto" (la macchina che entra in officina per un tagliando) immetterai i dati di confronto (km tagliando, data tagliando, data cambio gomme, etc etc) e provvederai ad aggiornare questi dati secondo il codice/i codici di ripetitività che avrai assegnato ai record.

    Qui non capisco..
    L'utente giustamente inserisce i dati di chiusura. Consigli a questo punto di aggiornare i valori di scadenza a seguito dei dati inseriti?

    Se ho capito così, questo è sicuramente corretto ma in questo modo perdo **la storia **delle "chiusure" passate e non avrò mai modo di visualizzarle nella pagina dei record chiusi.


  • Consiglio Direttivo

    Per le chiusure ti basterà creare una tabella "d'archivio". 😉