Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Tabella calendario
Forum - PHP - Tabella calendario

Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 12:51
Martedì, 26/05/2015
Ho un grande dubbio: devo creare un database in cui ci sono, tra le altra, le tabelle Utenti(con i soliti campi per l'anagrafica) e Calendario(campi: data, giornoSettimana(lun, mar...),OraEntrataMattina, OraUscitaMattina, OraEntrataPomeriggio, OraUscitaPomeriggio, OraEntrataSera, OraUscitaSera, festivo(1/0), feriale(1/0), ferie(1/0).

Allora, il problema non è nel creare le tabelle, ma nella relazione tra le due tabelle Utenti-LAVORA-Calendario. Vi spiego i miei dubbi:
1)Un utente LAVORA in uno o più giorni (relazione 1-N);
2)In un giorno LAVORANO uno o più utenti (relazione 1-N);
3)1-N + 1-N  =>  N-N
4)N-N  => nuova tabella,TabellaAssociativa, che chiamo ad esempio CalendariAssociati. Questa tabella contiene soltanto le chiavi primarie delle due tabelle (ID_Utente, Data).

Il mio problema sorge qui: nella tabelle calendario ci sono (365 * 10 (faccio il calendario da qui a 10 anni)= 3650 record) e mettiamo ad esempio che la tabella Utenti contenga 100 record, uno per ogni utente. La tebella associativa CalendariAssociati, conterrà 3650*100=365000 record!!!

I miei dubbi sono fondati!? Sto sbagliando qualcosa? Avete dei consigli sulla progettazione di queste due tabelle?

Ripeto, non è che non so come fare le cose, è solo che ho paura di creare una tabella di dimensioni spropositate. :(

Sto ragionando in modo corretto? E' così deve essere? Oppure ci sono modi più "leggeri" per fare la stessa cosa?

Grazie mille in anticipo

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:24
Martedì, 26/05/2015
Non riesco a capire qual'è lo scopo finale, di conseguenza è difficile dare dei consigli. Forse dovresti spiegarci come verranno usati questi dati (e quali query verranno effettuate).

365,000 non sono spropositati, sono un dataset piuttosto piccolo/medio.


Il mio blog: https://piero.dev
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 18:40
Mercoledì, 27/05/2015
La mia domanda era:
secondo voi è giusto fare una tabella a mo' di calendario(365 record)?
Visto che poi dovrò fare query del tipo: voglio sapere in quali giorni dell'anno lavora Pippo;
nel modo che vi ho descritto: tabella calendario - tabella utenti - tabellaAssociativa(X-Utente - Data).
La tabella associativa avrà: x (numero dei record tabella utenti) * 365 (record della tabella calendario; alla fine faccio il calendario solo per un anno).

Mettete il caso di una grande azienda, dove lavorano 500 persone; in questo caso la tabella associativa avrà:
500*365=182500 record.

Secondo voi è così che deve essere? Sto ragionando nel modo corretto? O c'è un modo migliore?

Spero di essere stato un po più

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:02
Mercoledì, 27/05/2015
Mi sembra un approccio ragionevole.

Come ho fatto notare nel post precedente, meno di qualche milione di records sono dei dataset piuttosto piccoli. Anche se ti sembra un numero piuttosto grande, per un computer non è un problema. Assicurati solo di impostare le giuste chiavi ed indici per aiutare il database ad ottimizzare la ricerca sul dataset.

Poi se hai bisogno di ulteriori ottimizzazioni, puoi sempre violare le regole di normalizzazione e cachare alcune informazioni separatamente. Costruisci l'applicazione, fai dei tests, poi se ti serve ottimizzare, ottimizza (ma non ottimizzare a meno che non sia veramente necessario).


Il mio blog: https://piero.dev
PM Quote