Consigli come strutturare db mysql

  • Creatore Discussione Creatore Discussione Bivio
  • Data di inizio Data di inizio

Bivio

Utente Attivo
19 Mag 2010
91
0
6
Salve, vorrei qualche consiglio, su come strutturare un db al meglio. Quello che vorrei realizzare e la gestione della merce di un ufficio, siccome la situazione e un po particolare vorrei creare il tutto con php/mysql da poter gestire in rete locale...
1. Devo suddividere i dati per settimane (1-52)
2. Avere x clienti che a loro volto fanno parte di un determinato gruppo

Io avevo pensato di creare una tabella clienti che oltre a vari dati anagrafici etc... inserivo anche il nome del gruppo, quindi quando con una select posso estrarre solo i clienti di un determinato gruppo, ma come faccio a suddividere i dati per settimane? creo una tabella per ogni settimana?

Voi cosa mi consigliate?
 
ciao
puoi inserire il numero della settimana nel record (non credo che ti serva fare una tabella settimane)
PHP:
<?php
//....per inserire
$num_set=date("W");//restituisce il numero della settimana 01-52
$ris=mysql_query("INSERT INTO tabella (n_set, dati) VALUES($num_set, '$dati')");
//...
?>
PHP:
<?php
//.... per estrarre i dati della settimana numero xy
$num_set=$_POST['settimana_selezionata'];
$ris=mysql_query("SELECT * FROM tabella WHERE n_set=$num_set");//per cui estrai i dati della settimana
//....
?>
se i gruppi hanno un nome (es. pittori, cantanti, sonnambuli...) ti fai una tabella dei gruppi e quando inserisci il cliente selezioni il gruppo e nel record del cliente metti il campo id_gruppo

se poi vuoi sapere le date di inizio/fine settimana (inizio=lunedì, fine=domenica) puoi ausare questa funzioncina (aggiustata alle tue esigenze)

PHP:
<?php
function settimana(){
	$num_set=date("W");//numero della settimana
	//riporto al lunedì
	$ini=strtotime("+0 week")-((date("N",strtotime("+0 week"))-1)*24*60*60);//in timestamp
	//aggiungo 6 giorni -> domenica
	$fine=$ini+(6*24*60*60);
	$gg_i=date("D d/m/Y",$ini);
	$gg_f=date("D d/m/Y",$fine);
	return "la settimana n&deg; $num_set va dal $gg_i al $gg_f<br>";
}
echo settimana();
?>
 
Ciao, grazie per la risposta, quindi se ho capito bene devo creare una tabella per ogni gruppo giusto? ottima anche la funzione delle settimane e proprio quella che mi serviva grazie :D
 
ciao
se non ho capito male quello che vuoi fare
no devi creare una tabella gruppi (es)
id_gr int(12) autoincrement primarykey
gruppo varchar(250) #nome del gruppo

1 cantanti
2 autostoppisti
3 sonnambuli
..ecc..

poi nella tabella clenti metterai un campo che conterrà l'id del gruppo di appartenenza (es)
id_cl int(12) autoncrement primarykey
id_gr int(12)
nome varchar(200)
per cui i record diverranno
1 3 Asdrubale
2 2 Sofonisba
3 3 Pancrazio
4 1 Pallino
...ecc...

quando verroi vedere i cantanti ti salterà fuori Asdrubale e Pancrazio
 
Penso di aver capito, ma non riesco a capire che vantaggi avrei tra la soluzione da te consigliata

Tabella: gruppi

id_gr | nome_gruppo |
1 blu
2 rosso
3 verde

Tabella: clienti

id_cl | id_gr | nome | cognome | sett |
1 2 pinco pallino 09
2 1 mario rossi 09
3 2 pinco pallino 15
4 3 carlo bianchi 06
5 2 luca esposito 07

query

PHP:
$sql = "SELECT * FROM clienti WHERE id_gr='2' ";
Dati estratti:

pinco pallino 09
pinco pallino 15
luca esposito 07

oppure

Tabella: clienti

id_cl | n_gruppo| nome | cognome | sett |
1 blu pinco pallino 09
2 rosso mario rossi 09
3 blu pinco pallino 15
4 verde carlo bianchi 06
5 blu luca esposito 07

PHP:
$sql = "SELECT * FROM clienti WHERE id_gr='blu' ";
Dati estratti:

pinco pallino 09
pinco pallino 15
luca esposito 07
 
ciao
intanto è una questione di principio per l'uso dei db relazionali (e buona programmazione), soprattutto se uno o piu valori si ripetono uguali su più record,
poi es. quando inserisci un nuovo cliente (o ricerchi) puoi farti una select dinamica che ti estrai i gruppi (con poi la comodità di aggiungere uno o più gruppi)
senza contare che un record
4 verde carlo bianchi 06
occupa piu spazio di
4 12 carlo bianchi 06
 
Ciao,
Ok, quindi ricapitolando potrei fare una cosa del genere?

Tabella: Gruppi = id_gr - n_gruppo
Tabella: Clienti = id_cl - id_gr - nome - cognome - sett - d_inserimento
Tabella: Merce = id_me - id_gr - id_cl - merce_da_ricevere - m_evasa - d_rice


Va bene cosi? in poche parole io devo salvare per ogni settimana la merce che il cliente deve ricevere e ancora non l'ha ricevuta perchè non presente. Appena la merce sarà disponibile verrà consegnata, quindi verrà inserita nel campo m_evasa SI e nel campo d_rice la data della consegna. Inoltre può capitare che ogni cliente abbia diversi prodotti e non tutti verranno consegnati lo stesso giorno, mi conviene scriverli tutti in un campo o differenziarli?
 
ciao
le tabelle vanno abbastanza bene, però non so esattamente quello che devi fare e come vuoi strutturare il db.
così a lume di naso da quello che ho intuito
1. hai dei gruppi formati da diversi clienti, ma un cliente può appartenere a gruppi diversi? es. asdrubale è un pittore (gruppo pittori), ma ha l'hobby della pesca quindi
appartiene anche al gruppo pescatori?
se solo un gruppo la tabella gruppi e clienti vanno bene, nel secondo caso no
2. le merci: anche queste sono divise in gruppi, gli stessi gruppi dei clienti? oppure sono indiffernziate (es) un paio di scarpe va bene per i pittori e per i chitarristi?
3. forse ti conviene fare anche la tabella merci soparutto se sono indefferenziate
4. poi per le consegne, se come dici un cliente a più merci e che queste possono avere consegne diverse più cle quella che chiami tabella merci io farei una tabella consegne (o ordini)

non sò se la sto facendo più difficile di quello che è effettivamente, ma un consiglio fatti tutte le domande possibili e cerca di darci una risposta, prendi carta e matita e studiati tutte le relazioni che devi avere,
e/o collegamenti tra le tabelle. mettere le mani dopo su un db può essere una rogna

eventualmente siamo qui
 
Si diciamo che il progetto e un po impegnativo, e vorrei creare qualcosa con una base solida e strutturato con logica. Rispondendo alle domande:

1. Ho diversi clienti che fanno parte solo ed esclusivamente di un gruppo.
2. La merce e uguale per tutti i clienti indifferentemente dal gruppo di appartenenza.
3. Quindi mi converrebbe creare una tabella per la merce e per poi associarla al singolo cliente giusto?
4. Ok, devo chiarire meglio questo aspetto.

Sto seguendo il tuo consiglio, ho preso un foglio di carta e sto facendo tutte le prove possibili, appena avvarrò finito vi chiederò un consiglio finale.

Grazie :byebye:
 

Discussioni simili