SQL - numero progressivo e azzeramento [urgente]
Ho bisogno di un aiuto ed entro oggi perchè domani ho l'esame
Devo far uno schema entità-relazione e scrivere le tabelle risultanti in SQL.
Il mio problema è come interpretarein sql questo punto della traccia:"...il numero di turno e un numero progressivo che viene azzerato ogni giorno..."
vi incollo la traccia completa nel caso vi servisse:

Devo far uno schema entità-relazione e scrivere le tabelle risultanti in SQL.
Il mio problema è come interpretarein sql questo punto della traccia:"...il numero di turno e un numero progressivo che viene azzerato ogni giorno..."
vi incollo la traccia completa nel caso vi servisse:
[size=75]Si progetti uno schema concettuale Entità-Relazioni per lo scenario più sotto descritto.
Una base di dati deve essere utilizzata per gestire i servizi forniti da un laboratorio di analisi.
Bisogna, pertanto, tener traccia dei pazienti che accedono al laboratorio caratterizzati dai seguenti dati: numero di tessera sanitaria, codice fiscale, nome, cognome, data e paese di nascita, residenza, pagamento del ticket (esente, non esente) e data di ultimo aggiornamento. I pazienti per accedere ai servizi del laboratorio hanno bisogno di fare l’accettazione e pagare eventualmente il ticket. Un’accettazione è caratterizzata da un numero univoco di accettazione, un numero di turno, una data di accettazione, la data di ritiro dei risultati, il costo complessivo, il paziente che fa richiesta e le ricette presentate. Si osservi che il numero di turno è un numero progressivo che viene azzerato ogni giorno e che le ricette sono caratterizzate dai seguenti dati: codice univoco, data di emissione ed ASL di riferimento. A ciascuna ricetta vanno associati gli esami prescritti identificati da codice univoco, nome, unità di misura, valore minimo e massimo e per ciascun esame prescritto nella ricetta va indicato l’esito (positivo, negativo), il valore riscontrato ed una eventuale segnalazione. Si osservi che la segnalazione è obbligatoria nel caso in cui il valore riscontrato sia inferiore al valore minimo o superiore a quello massimo, relativi a ciascun esame considerato.
Per ciascun paziente, inoltre, bisogna tener traccia della cronologia delle malattie memorizzando la malattia (caratterizzata da codice identificativo e nome), la data di inizio e di guarigione, un eventuale luogo di ricovero ed i farmaci prescritti.
Indicare le cardinalità delle relazioni e un identificatore per ciascuna entità.
Si definiscano le relazioni (tabelle) risultanti in SQL, avendo cura di esplicitare i vincoli di integrità.[/size]
Risposte
Spero tu ammetta una funzione o qualche equivalente che ti riporta la data odierna - non c'è bisogno di definirla, basta ammettere che c'è: chiamala "today", "date('now')" o similia.
Se prendi il massimo numero di turno fra tutti quelli memorizzati che hanno la data uguale alla data odierna, ed aggiungi uno, ottieni il successivo (progressivo) numero di turno. Se tale massimo non esiste, vuol dire che tutte le date memorizzate (se vi sono tuple) sono precedenti e quindi assumi massimo = 0, ed il successivo/progressivo sarà 1.
Troppo banale?
Se prendi il massimo numero di turno fra tutti quelli memorizzati che hanno la data uguale alla data odierna, ed aggiungi uno, ottieni il successivo (progressivo) numero di turno. Se tale massimo non esiste, vuol dire che tutte le date memorizzate (se vi sono tuple) sono precedenti e quindi assumi massimo = 0, ed il successivo/progressivo sarà 1.
Troppo banale?

ok capito che intendi ma a livello pratico non so come fare, ad esempio quando creo la tabella dovrei fare tipo:
questo dovrebbe renderlo progressivo, ma poi...
CREATE TABLE accettazione ( numero_turno smallint NOT NULL AUTO_INCREMENT ...
questo dovrebbe renderlo progressivo, ma poi...
Non farlo autoincrementale, non c'è bisogno e comunque non è quello che si richiede.
Semplicemente hai un intero; quando devi creare una nuova voce, ottieni il numero di turno con
o qualcosa del genere, dove "accettazione" è la tabella/relazione e "turno" e "data" i campi. Assumi di poter anche trattare il valore null se questo non viene convertito in zero durante la somma (per esempio, in mysql usando coalesce() o un controllo).
Semplicemente hai un intero; quando devi creare una nuova voce, ottieni il numero di turno con
SELECT max(turno)+1 FROM accettazione WHERE data=today()
o qualcosa del genere, dove "accettazione" è la tabella/relazione e "turno" e "data" i campi. Assumi di poter anche trattare il valore null se questo non viene convertito in zero durante la somma (per esempio, in mysql usando coalesce() o un controllo).