Gestionale con MySql e OpenOffice – 3 prima tabella con join

Installati MySql e openoffice (o libreoffice), andiamo a modificare la tabella fatture, rendendo così la sua forma definitiva.

Accedendo alla workbench di MySql, cliccando sulla connessione e
poi sul nostro schema “nuovoschema”, possiamo cliccare sulla
tabella fatture col tasto destro del mouse.

Se per caso si erano inseriti dati nella tabelle è meglio cancellarli,
cliccando sull’icona con la riga rossa (o con il meno) e poi su apply.

Dal menu che appare clicchiamo su Alter table”

Clicchiamo sulla colonna ragionesociale_fate cambiamo il tipo di dati: da Varchar(45) impostiamo INT.
In questa colonna infatti verranno inseriti solo dei numeri interi.
Ogni numero intero indicherà una e una sola ragione sociale.

Servirà quindi creare un elenco di ragioni sociali e associare ogni riga ad un numero.

Quindi il codice SQL per la tabella fattura (per crearla da zero) è:
CREATE TABLE
`nuovoschema`.`fatture` (
`idfatture` INT NOT NULL AUTO_INCREMENT,
`ragionesociale_fat` INT NOT NULL ,
`data_fat` DATE NULL ,

`imponibile_fat` DOUBLE NULL DEFAULT 0 ,
`IVA_fat` DOUBLE
NULL DEFAULT 0 ,
`totale_fat` DOUBLE NULL DEFAULT 0 ,

`fatturecol` VARCHAR(45) NULL ,
PRIMARY KEY (`idfatture`) )

ENGINE = MyISAM
DEFAULT CHARACTER SET = latin1;

Su nuovoschemacreiamo una nuova tabella con quattro colonne:

Nome: elenco_nominativi
Collation:
latin1 default collation
Engine:
MyISAM

Tutte le tabelle verrano create con collation = latin1 default collatione engine = MyIASM per cui questo non verrà più ripetuto. Stessa cosa vale per le impostazioni della chiave primaria id.

La prima colonna mantiene il nome automatico (idelenco_nominativi) e si clicca su PK, NN e AI
2^: nome:
nominativi_en, con tipo di dato VARCHARma questa volta si fa doppio clic sulla scritta varchar(45) e si modifica il numero dentro le parentesi impostandolo pari a 120, ottendo così VARCHAR(120):
ossia ogni ragione sociale può avere al massimo 120 caratteri, che – per avere un’idea – sono ¾ di un sms.

Poi si clicca su NN e UQ(unique), dal momento che una riga senza ragione sociale non ha senso e che è importante che non ci siano due  righe con la stessa ragione sociale.
3^: tipo_en, SMALLINT, NN
4^: attivo_en, SMALLIN, NN, default: 1

La prima colonna(la chiave primaria) dà il numero associato alla  ragione sociale
La
seconda colonna dà la ragione sociale
La
terza colonna serve a specificare se si tratta di un fornitore, di un cliente o altre tipologie (subappaltatori, professionisti etc a seconda della precisione che serve)
Noi qui si usa solo due tipologie: fornitore: con valore 1, e cliente con valore 2.
La
quarta colonna serve ad indicare se il nominativo è ancora attivo o se è da considerarsi archiviato. Anche qui noi usiamo solo due valori: 1 attivo, 2 archiviato.

Impostate le colonne si può cliccare su apply
(appaiono i comandi sql corrispondenti, di nuovo applye infine close).

Se si clicca su edit table data si può inserire nella colonna “nominativi_en” i primi nominativi che servono da esempio.

Li imposteremo tutti di tipo 1 (fornitori) e con valore “attivo” 1,
ossia attivo. Non si imposta la prima colonna
idelenco_rag_soc
in quanto si riempirà automaticamente.

Primofornitore, 1, 1
Secondofornitore, 1, 1
Terzofornitore, 1, 1
Quartofornitore, 1, 1
Quintofornitore, 1, 1
Sestofornitore, 1, 1
Settimofornitore, 1, 1
Ottavofornitore, 1, 1

Si clicca su Apply – Apply – Close

Si può osservare la prima colonna, con gli id, che conterrà in una sequenza di numeri da 1 a 8. Quei numeri sono i numeri associati ad
una data ragione sociale. Ossia se ad esempio nella tabella
fatture alla colonna ragionesociale_fat si vuole “scrivere” ‘Sestofornitore’ basterà scrivere il numero 6 e sarà poi il server sql ad associare il numero 6 al nome ‘sestofornitore’

Ho detto “scrivere” ma in realtà l’utente non vede mai i numeri, scrive e legge sempre solo i nomi associati, tuttavia impostare le tabelle con campi interi al posto di campi stringa permette di risparmiare spazio e soprattutto di essere più rigorosi: nessuno potrà mai inserire ad esempio Ingegner D. Rovelli nell’elenco delle fatture e Ing. Diego nell’elenco del telefono. La codifica permette di mantenere una leggibilità generale. Inoltre se un giorno L’Ing. D. Rovelli cambia la ragione sociale in ‘Rovelli associati sas’ si potrà scegliere (quando sia sensato  farlo) di andare a modificare il nome nella tabella elenco_rag_soc, modificare la ragione sociale e tutti i documenti con quel riferimento saranno aggiornati con la nuova ragione sociale.

Ora modifichiamo la tabella fatture inserendo queste tre righe (si esclude sempre il campo id che si aggiorna da solo e si inseriscono numero  fattura – ragionesociale – data (sempre e solo con forma AAAA-MM-GG) – imponibile – iva – totale:

1, ‘4’, ‘2009-01-02’, 100, 10, 110
2, ‘3’, ‘2009-01-28’, 1, 0, 1
3, ‘4’, ‘2011-09-25’, 10000, 2000, 12000

Abbiamo tre fatture, che per essere lette. Tuttavia nel campo ragionesociale_fat
ci sono solo dei numeri, per vederli decodificati (senza necessità di tenere a mente le associazioni) serve fare una JOIN.
Una JOIN è un comando sql che permette di associare a un numero, una riga di una tabella. Nel caso vogliamo associare a ogni numero presente nel campo
ragionesociale_fat la riga corrispondente in  elenco_rag_soc.

Per fare questo si cancella quello che c’è scritto nella parte bianca della workbench e si scrive:

USE nuovoschema;
SELECT fatture.*, elenco_nominativi.nominativi_en FROM fatture  JOIN elenco_nominativi ON ragionesociale_fat =  idelenco_nominativi;

Di cui la parte

FROM fatture JOIN elenco_nominativi ON ragionesociale_fat =
idelenco_nominativi

vuol dire: prendi la tabella fatture, per ogni riga della tabella fatture guarda nel ragionesociale_fat, prendi il numero che c’è in quel  campo e associami la riga di elenco_nominativi che ha l’id uguale a  quel numero.

Invece la parte SELECT fatture.*, elenco_nominativi.nominativi_en

vuol dire: del risultato che hai ottenuto prima mostrami tutte le colonne della tabella fatture e solo la colonna nominativi_en della tabella   elenco_nominativi.

Per fare una JOIN è importante che uno dei due campi che si collegano (in questo caso elenco_nominativi.idelenco_nominativi e fatture.ragionesociale_fat)
sia un campo univoco, ossia che appaia una volta solo nella tabella di appartenenza. Tutti i campi primary key sono campi univoci.
Supponiamo di usare un campo non univoco.
Mettiamo che un dato valore appaia due volte nella stessa tabella, come se ci fosse, in elenco_rag_soc:

1 Dott. Lo Bianco
2 Arch. Rossi
3 On. Vittori
2 Ing Verdi

Ogni volta che nella tabella fatture, nel campo ragionesociale_fat
appare il numero 2, il comando JOIN produrrà 2 righe distinte: la prima associando Arch Rossi e la seconda associando Ing Verdi.
Si può  notare come una join non sia modificabile da sql. Questo perchè la  join non sa se si creerà una tabella con un campo univoco. Nel caso in cui ad esempio non ci fosse un valore univoco e si modifica una riga della join, mysql non sarebbe in  grado di scegliere quale tabella andare a modificare. Tuttavia impostando come indici univoci le chiavi primarie di ciascuna tabella coinvolta sembra possibile modificare la join.

Una join collega un campo1 di una tabella1 con un campo2 di una tabella2 se campo1 o campo2 sono vuoti, la join non ti mostra quella riga:
ad esempio se una riga di fatture è fatta così
6,NULL, ‘2009-01-02’, 100, 10, 110
Essendo nullo il campo da collegare questa riga non apparirà nel risultato della JOIN.
Per questo è importante che i campi che si vogliono collegare a righe di altre tabelle non siano nulli, soprattutto a questo serve la clausola NN (not null) che si imposta quando si crea una tabella.

Per ovviare a questo esistono i comandi LEFT JOIN o RIGHT JOIN. Il primo vuol  dire mostra tutte le righe della colonna sinistra e, se si possono collegare,  collegale alla tabella destra, la seconda è uguale ma a tabelle invertite.

Ora che abbiamo fatto la prima tabella con corrispettivo elenco, possiamo passare a impostare un Form da openoffice o libreoffice. Un Form è una pagina che permette di inserire e modificare in maniera agevole e “umana” i dati presenti nel server sql.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: