Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-07-2008, 15:25   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[MySql]Suggerimenti struttura tabella

Buondì a tutti .

Per me è quasi un 3d ciclico, ma il problema che da tempo mi trovo ad affrontare, è per me una sfida ancora non vinta ed io non sono ancora stato capace di trovare una soluzione al problema.

In sintesi:

devo gestire le ore lavorate di altri utenti, gestirne le assenze, i permessi, le malattie etc... presso sedi di lavoro che possono essere diverse da quella centrale.

Per ragioni che non sto qui a spiegare, prima c'era una struttura che non potevo modificare (nel db), ed era, per quanto io sia l'ultima ruota del carro, davvero progettata da cani. Altri utenti di questa sezione si ricorderanno i 3d in cui chiedevo aiuto e di come le tabelle fossero strutturate male.

Bene... ora tocca a me (quindi.. male )

Per memorizzare il lavorato, avevo pensato ad una tabella così strutturata:

Codice:
id_lavoro - pk
id_utente -> (pk della tabella utenti)
id_sede -> (pk della tabella sedi)
id_categoriaLavoro -> (pk della tabella categorieLavori)
data ->datetime
parametroBase ->double ->(prende il valore dalla scheda utente, se presente)
lavoratoExtra ->double ->(se ha lavorato in più del dovuto)
totale -> double(eventuale somma tra parametroBase ed Extra oppure inserimento diretto in assenza di parametri)
maggiorazione int -> maggiorazione in percentuale in base al tipo di extra
codiceAssenza -> varchar -> in caso di assenza viene scelto un valore
Ora, i miei dubbi e i miei limiti dovuti alla poca conoscenza di base dati ma è meglio se ne espongo uno per volta:

1)Devo tirare fuori un tabulato mensile che raggruppi tutti gli utenti che hanno lavorato durante un determinato mese, ed avere una visualizzazione a prescindere che ci siano dei giorni lavorati o meno, mi spiego meglio:

utente: pippo
data: 07/07/2008, 08/08/20008

io devo comunque visualizzare i dati in modo che ci siano tutti i giorni del mese e mettere il totale in corrispondenza del giorno lavorato.

Parto con questa prima domanda e poi vedremo

Grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 16:32   #2
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Uhm, non mi sono chiare alcune cose:
  1. Ma la chiave primaria della tua tabella è solo id_lavoro?
  2. Se invece è la tripletta (id_lavoro, id_utente, id_sede) tu per ogni lavoratore per un determinato lavoro mantieni la data di inizio di tale lavoro o cosa?
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 16:41   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da magix2003 Guarda i messaggi
Uhm, non mi sono chiare alcune cose:
  1. Ma la chiave primaria della tua tabella è solo id_lavoro?
  2. Se invece è la tripletta (id_lavoro, id_utente, id_sede) tu per ogni lavoratore per un determinato lavoro mantieni la data di inizio di tale lavoro o cosa?
Si, solo id_lavoro.

La 'tripletta' la prende solo dalle altre tabelle ma senza essere chiavi primarie in questa.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 16:43   #4
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Scusami se insisto, ma voglio capire una cosa... Tu per ogni lavoro hai un solo lavoratore assegnato ad esso?
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 18:32   #5
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da magix2003 Guarda i messaggi
Scusami se insisto, ma voglio capire una cosa... Tu per ogni lavoro hai un solo lavoratore assegnato ad esso?
No

Faccio un esempio:

CategorieLavori:

FRESATURA
LUCIDATURA
SALDATURA

etc..

un utente può svolgere uno, o tutti i lavori presenti nelle categorie.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 18:40   #6
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Non era questo quello che intendevo. Quello che intendevo è che tu non puoi avere una situazione di questo genere nel tuo db:

Codice:
id_lavoro = 1 = FRESATURA
id_utente = 2 = pippo
id_utente = 3 = paperino

id_lavoro | id_utente
     1             2
     1             3
Per come definisci tu la tabella questo non sarebbe possibile. E' giusto che sia così?


Ponendo il caso sia giusto e che la data indichi il giorno di inizio del lavoro, un esempio di query può essere:

Codice:
SELECT id_lavoratore
FROM nome_tabella AS t
WHERE t.date BETWEEN xx/xx/xxxx AND yy/yy/yyyy
GROUP BY id_lavoratore
Ciao,

Giorgio
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 18:44   #7
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da magix2003 Guarda i messaggi
Scusami se insisto, ma voglio capire una cosa... Tu per ogni lavoro hai un solo lavoratore assegnato ad esso?
stesso dubbio... se metti id_lavoro come primaria hai che puoi assegnare un solo lavoratore a quel lavoro e che puoi specificare una sola data. A patto di non usare altre tabella apposite.
Hai provato a costruire un modello concettuale del database ?
Per fare un lavoro fatto bene dovresti inoltre studiarti un pò le forme normali... per esempio l'attributo "totale" non rispetta la terza forma normale perchè è un attributo non chiave che dipende da altri attributi non chiave ("parametroBase" e "lavoroExtra"). Infatti "totale" lo ricavi tranquillamente con un sum tra i due valori.
Sarebbe utile capire come sono messe anche le altre tabelle.
__________________
CPU Ryzen 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 18:57   #8
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
ah ecco, capisco il vostro dubbio

la pk la potrei chiamare anche semplicemente 'contatore'.

Avevo capito ci si riferisse all'id_categoriaLavoro.

L'avevo pensata così perchè quando si compila la scheda, lo si fa una persona per volta, cioè l'utente deve compilare una scheda per ogni singola persona.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2008, 19:04   #9
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Beh allora direi che la query diventerà qualcosa di simile a:

Codice:
SELECT id_utente
FROM nome_tabella AS t
WHERE t.date BETWEEN xx/xx/xxxx AND yy/yy/yyyy
GROUP BY id_utente
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2008, 11:46   #10
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Stamattina, rileggendo meglio il tutto, mi sono più chiare determinate cose:

allora, l'id_lavoro è come se fosse il numero di una fattura.

Ora, per la singolare necessità dell'utente di inserire una sola scheda per volta, relativa quindi ad un solo dipendente per volta, è corretto utilizzare l'id_lavoro come chiave primaria ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2008, 11:54   #11
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Siccome da quello che ho capito ci sono più dipendenti per ogni singolo id_lavoro, è sbagliato. La chiave primaria dovrebbe essere (id_lavoro, id_dipendente).
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2008, 11:56   #12
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da magix2003 Guarda i messaggi
Beh allora direi che la query diventerà qualcosa di simile a:

Codice:
SELECT id_utente
FROM nome_tabella AS t
WHERE t.date BETWEEN xx/xx/xxxx AND yy/yy/yyyy
GROUP BY id_utente
Ho provato questa select, ma il fatto è che a me serve di visualizzare a prescindere dei dati contenuti nella tabella, l'intero mese lavorato diviso per giorni, per es.:


lun1 mar2 mer3 gio4 ven5 sab6 dom7 lun8 etc....
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2008, 11:57   #13
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da magix2003 Guarda i messaggi
Siccome da quello che ho capito ci sono più dipendenti per ogni singolo id_lavoro, è sbagliato. La chiave primaria dovrebbe essere (id_lavoro, id_dipendente).
No, non ci sono più dipendenti per un singolo id_lavoro. Ripeto, l'id_lavoro è relativo solo e soltanto alla scheda che viene compilata per un unico utente.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2008, 12:16   #14
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Ok, allora la tabella dovrebbe andare bene. Fosse in te proverei a convertirla in una forma normale come è stato suggerito prima, ma non so se ti serva.

Per la query prova così allora:

Codice:
SELECT  t.id_utente, t.date
FROM nome_tabella AS t
WHERE t.date BETWEEN xx/xx/xxxx AND yy/yy/yyyy
GROUP BY t.id_utente, t.date
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2008, 14:29   #15
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da magix2003 Guarda i messaggi
Ok, allora la tabella dovrebbe andare bene. Fosse in te proverei a convertirla in una forma normale come è stato suggerito prima, ma non so se ti serva.

Per la query prova così allora:

Codice:
SELECT  t.id_utente, t.date
FROM nome_tabella AS t
WHERE t.date BETWEEN xx/xx/xxxx AND yy/yy/yyyy
GROUP BY t.id_utente, t.date
mmm... perdonami, ma non riesco a capirla questa query, cioè, non mi rappresenta un intervallo temporale in termini di quantità di giorni in un mese.

In sostanza, ci sono dei giorni dove l'utente non ha lavorato, ma a prescindere dal fatto che in corrispondenza della data ci sia un valore o meno, io devo visualizzare tutti i giorni. In pratica, devo tirar fuori un calendario che abbia come nome delle colonne, il nome ed il numero dei giorni del mese selezionato e, all'interno di questi giorni, visualizzare il totale del lavorato dove presente.

Ora capisco perchè chi aveva progettato in precedenza la tabella, anzichè avere un campo di tipo date, aveva messo:

anno int
mese int
giorno int
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2008, 12:23   #16
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
uppettino.....
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 14:23   #17
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
ri-uppete
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 16:15   #18
dany84
Member
 
L'Avatar di dany84
 
Iscritto dal: Aug 2005
Messaggi: 306
Non so se posso aiutarti ma ci provo.
Per la visualizzazione fai un'interfaccia web o qualcosa di simile?
Perchè tirare fuori anche le date dove non ci sono dati non so se è possibile utilizzando solo MySql...
__________________
... I believe in miracles / I believe in a better world / for me and you ...
...Music is like sunrise for me / it's joyful like a trip in a time machine...
...Sei solo corri, corri, corri, corri / Non ti voltare mai...
dany84 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 17:17   #19
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da dany84 Guarda i messaggi
Non so se posso aiutarti ma ci provo.
Per la visualizzazione fai un'interfaccia web o qualcosa di simile?
Perchè tirare fuori anche le date dove non ci sono dati non so se è possibile utilizzando solo MySql...
L'applicazione è lato client, come interfaccia posso utilizzare C# e/o VB.Net.

Comunque, la tabella l'ho cambiata, al posto di date, ho optato per:

anno = int
mese = int
giorno = int
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2008, 08:12   #20
dany84
Member
 
L'Avatar di dany84
 
Iscritto dal: Aug 2005
Messaggi: 306
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
L'applicazione è lato client, come interfaccia posso utilizzare C# e/o VB.Net.

Comunque, la tabella l'ho cambiata, al posto di date, ho optato per:

anno = int
mese = int
giorno = int
ah ok...e come hai risolto il resto?
Io ti scrivo comunque quello che avevo in mente, nel caso avessi tenuto il campo date:
fare un array (nel linguaggio che usi) con le date comprese nel periodo che ti interessa.
Poi fare un for su questo array e controllare se nella tabella c'è un valore per la data presente nell'array. Se si, visualizzi il valore, altrimenti no.
Questo andrebbe fatto facendo ogni volta una query nel for, e potrebbe diventare pesantuccia l'applicazione, ma è la cosa più semplice.
Altrimenti metti i valori tirati fuori dalla query generale (quella con tutti i valori compresi nel range di date) in una struttura (non so se tutti i linguaggi le supportano) e poi controlli se il valore è presente nella struttura. Se si, visualizzi il valore, altrimenti no.
__________________
... I believe in miracles / I believe in a better world / for me and you ...
...Music is like sunrise for me / it's joyful like a trip in a time machine...
...Sei solo corri, corri, corri, corri / Non ti voltare mai...
dany84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
La Camera USA presenta il conto: i data ...
Non solo EV, ma anche IA: Panasonic inau...
iPhone Duo, il debutto del pieghevole di...
Atlas 960E SuperPoD, la risposta di Huaw...
IA militare e nucleare: esperti USA e ci...
Dieci mini-reattori nucleari in Europa d...
CONTROL Resonant su PC: Path Tracing, Ra...
ColorOS 17 arriva su circa 90 dispositiv...
GTA VI, il multiplayer potrebbe debuttar...
Aggiornamento KB5002914 rompe Excel: ecc...
Processo Huawei a Brooklyn: l'FBI mostra...
WhatsApp introduce nuovi temi per le cha...
NVIDIA, Google e Emerald AI uniscono le ...
iPhone 18 Pro Max, il test sulla vapor c...
Fine estate in giardino: le proposte sco...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v