In realtà qui non si tratta di linguaggio php ma di come progettare un Database, quindi dovresti cercare dei manuali, della documentazione al riguardo. In particolare quando si progetta un DB una caratteristica molto importante è la normalizzazione di un DB. Poiché è un concetto abbastanza lungo è meglio se cerchi qualcosa a proposito.
Veniamo al tuo problema.
La tabella fatture potrebbe essere così formata:
id_fattura
nr_fattura
luogo
data
percentuale_rivalsa
percentuale_iva
totale
Hai scritto:
Ho però pensato che, all'interno di una stessa fattura, ci possono molte voci e quindi n° descrizioni, n° quantita, n° prezzo unitario e n° totale_parzale.
Ed hai pensato bene, quindi conviene che ti faccia una tabella contenenti tante righe quanti sono i prodotti diversi che risultano elencati nella fattura.
La tabella potrebbe chiamarsi "prodotti_fatturati", ed è così formata:
id_fattura
descrizione
quantita
prezzo_unitario
totale_parziale
con chiave primaria id_fattura e descrizione, e id_fattura chiave esterna in relazione con la chiave primaria id_fattura della tabella "fatture".
Chiariamo il tutto con un esempio:
Supponiamo di inserire in fatture i seguenti dati:
id_fattura 4
nr_fattura 4543543
luogo Roma
data 28-01-07
percentuale_rivalsa 10%
percentuale_iva 20%
totale 2000,45
Ora supponiamo che in tale fattura siano elencati 2 soli prodotti: 4 porte a 100 euro l'una e 3 sedie a 56 euro l'una. Nella tabella prodotti_fatturati avremo:
id_fattura 4 (è lo stesso della tabella precedente)
descrizione porte
quantita 4
prezzo_unitario 100
totale_parziale 400
ed un altro record:
id_fattura 4 (è lo stesso della tabella precedente)
descrizione sedie
quantita 3
prezzo_unitario 56
totale_parziale 168
ed il gioco è fatto.
Infatti se ti servono i datti della fattura nr. 4543543 basta prendere l'id_fattura corrispondente, e con questo poi prelevare i prodotti elencati in prodotti fatturati la cui fattura di riferimento ha id = 4.
In realtà si poteva procedere anche in tal modo.
La tabella "fatture" è = a quella che ti ho mostrato, mentre la tabella prodotti_fatturati:
id_prodotto fatturato (autoincrement)
descrizione
quantita
prezzo_unitario
totale_parziale
e poi creare una tabella di cross che tenga traccia della fattura e dei prodotti che ad essa appartengono; una tale tabella è composta da 2 campi:
id_fattura
id_prodotto_fatturato
con ambedue i campi chiave primaria.
Ciò però sta a significare, concettualmente, che un prodotto lo possiamo riutilizzare anche in più fatture. Cioé id_prodotto può essere associato a diversi id_fattura.
Questo è quello che ci direbbe se noi utilizzassimo la tabella di cross.
Riprendiamo l'esempio visto prima.
I dati nella tabella "fatture" sono quelli già visti, mentre per le altre 2 supponiamo:
id_prodotto_fatturato 7
descrizione porte
quantita 4
prezzo_unitario 100
totale_parziale 400
id_prodotto 8
descrizione sedie
quantita 3
prezzo_unitario 56
totale_parziale 168
nella tabella di cross avremo:
id_fattura id_prodotto_fatturato
4 7
4 8
Poiché la chiave primaria è costituita da tutti e due i campi, se noi inserissimo il seguente record:
id_fattura id_prodotto_fatturato
5 7
il DB non dà errore, quindi "concettualmente" possiamo associare uno stesso prodotto presente in una fattura anche ad un'altra fattura.
Ecco perché è preferibile la prima soluzione che ti ho suggerito.
In realtà, poi, nella tabella "fatture" possiamo anche togliere il campo totale visto che tale informazione la possiamo reperire dai totali parziali dei vari prodotti; però se uno desidera, può anche tenerlo per semplicità.
Cioao.
![]()