Corso PHP: 24.2 – Organizzare un database MySQL (Parte 2^)

Possiamo ora procedere alla creazione della prima tabella come indicato precedentemente.

Tabella Clienti.

Il primo campo sarà un numeratore delle righe gestito automaticamente da MySQL. Lo chiamiamo ‘id’ e occorre flaggare il campo ‘A_I’ (Auto Incremento) come mostrato in figura.

Tabella Clienti (Auto Incremento)
Tabella Clienti (Auto Incremento)

Apparirà la finestra che ci chiede se aggiungere automaticamente un indice primario (univoco) su questo campo e noi confermeremo premendo il tasto ‘Esegui’.

Il tipo del campo deve essere lasciato INT (numerico intero) come proposto per default.

Inseriamo quindi tutti gli altri campi come in figura:

Inserimento campi Tabella Clienti
Inserimento campi Tabella Clienti

I nomi attribuiti ai campi sono ovviamente nomi di fantasia, mentre per il tipo dei campi va notato che abbiamo adottato il tipo CHAR per i campi a lunghezza fissa come il CAP o il codice cliente (ammesso che il vostro codice cliente abbia lunghezza fissa), mentre abbiamo indicato VARCHAR per i campi la cui lunghezza non è prefissata. Per questi ultimi si indicherà una lunghezza massima. Per il campo ‘Stato’ abbiamo indicato la sigla di due caratteri. In un’applicazione di questo tipo andrebbe prevista anche una tabella ‘paesi’ con i codici intrernazionali o le sigle ed il relativo nome del paese. In questo caso per semplicità l’abbiamo omessa. La decodifica del nome potrà sempre essere prevista direttamente a programma.

Nell’ultima colonna a destra possono essere inseriti eventuali commenti al singolo campo. Noi come esempio abbiamo messo il commento ‘12 cifre saranno sufficienti a contenere i codici partita IVA dei paesi europei’ al campo ‘Partita IVA’.

In fondo alla schermata di inserimento campi noterete la possibilità di inserire un commento alla tabella, cambiare la codifica dei campi (come detto noi abbiamo predefinito come codifica UTF-8) ed anche la possibilità di schegliere il tipo di motore DB. Il valore predefinito è InnoDB. Le differenze più significative  tra i due principale motori InnoDB e MyISAM sono:

  • MYISAM supporta il Table-level Locking cioè una SELECT blocca la tabella per altri utilizzi sino al termine della SELECT. Per contro InnoDB supporta il Row-level Locking cioè il blocco è a livello di singola riga e non di tabella.
  • MYISAM non supporta ‘commit’ e ‘rollback’ Ogni comando (aggiornamento, inserimento, cancellazione) viene eseguito in maniera definitiva senza possibilità di rollback al contrario di quanto avviene con InnoDB.
  • InnoDB a differenza di MYISAM supporta l’integrità referenziale che significa che quando una tabella (ad esempio Ordini) ha una chiave esterna (ad esempio codice prodotto) che punta a una tabella diversa (ad esempio i prodotti), in caso di aggiornamenti o eliminazioni, questi cambiamenti sono applicati a cascata alla tabella collegata a quella modificata. Ad esempio, se un prodotto viene rinominato, le chiavi esterne che puntano alle tabelle saranno anch’esse aggiornate; se un prodotto viene eliminato dalla tabella ‘Prodotti’, ogni ordine, che include il prodotto eliminato verrà eliminato. Inoltre, ogni nuovo inserimento deve avere la chiave esterna che punta ad una voce esistente.

Se non si devono operare molti aggiornamenti/inserimenti in una tabella, MyIsam andrà benissimo e offrirà una grande velocità soprattutto se si usano campi a lunghezza fissa. In questo caso avremo anche il vantagglio di poter salvare una database semplicemente copiando i files .frm .MYD e .MYI che si trovano nella directory \xampp\mysql\data\NomeDelNostroDB.

Possiamo quindi proseguire con la creazione delle altre tabelle sempre tenendo presente che sia il numero delle tabelle previste sia i campi in ciascuna tabella sono solamente indicativi e non sufficienti per una pur basica applicazione di gestione ordini. Vanno presi solo come esempio per la crezione del nostro database.

La testata ordini potrà contenere i campi:

TESTATA ORDINI
Numero Ordine
Data Ordine
Codice Cliente
Numero Fattura
Importo Totale
Bolla Spedizione
Data Spedizione
Indirizzo Spedizione
Città Spedizione
Provincia Spedizione
CAP Spedizione
Stato Spedizione
Corriere

E la tabella di DB essere quindi qualcosa di simile a quella riportata in figura:

Testata Ordini
Testata Ordini

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Proseguendo con la creazione avremo alla fine anche le tabelle Dettagli ordine, Fatture e Prodotti come segue:

DETTAGLIO ORDINI FATTURE PRODOTTI
Numero Ordine Numero Fattura Codice Prodotto
Codice Prodotto Data Fattura Confezione
Quantità Numero Ordine Costo
Prezzo Totale Fattura Prezzo Vendita
Sconto Giacenza
IVA
Cod.esenzione IVA

I codici cliente, ordine, fattura e prodotto possono dare origine ad altrettanti indici in modo da poter mettere in relazione le diverse tabelle. Fate attenzione ad indicare correttamente se gli indici devono essere univoci o no. Es. nella tabella Clienti il codice cliente sarà univoco, mentre nella testata ordine il codice cliente non lo è. La creazione dell’indice può essere fatta direttamente in fase di caricamento della struttura della tabella (voce: Indice) oppure successivamente richiamando da menu la struttura della tabella (sulla parte destra di ciascun campo noterete le diciture Primaria, Unica, Indice).

Per impostare le relazioni tra le tabelle, cliccate quindi sul nome del database e selezionate la voce di menu ‘Designer’ (vedi figura).

Designer
Designer

 

Nella schermata che compare cliccale sull’icona ‘Crea relazioni’ (vedi figura) e quindi cliccando sugli indici relativi allo stesso codice su due tabelle, metterete in relazione le tabelle stesse su quel campo.

Crea relazioni
Crea relazioni

 

 

 

 

Alla fine nel nostro esempio avremo il risultato che vedete nella figura che segue:

Relazioni
Relazioni

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.