Newsgroup: it.comp.lang.visual-basic
Titolo: Come Impostare un Database?

Sto mettendo insieme un piccolo programma di gestione aziendale (VB5, Jet,
DAO, MSAccess) ed ho qualche dubbio su come continuare.
Ho creato le tabelle clienti, fornitori, prodotti, ecc. nelle quali il
numero di campi e' fisso.
Ora dovrei creare una tabella per le fatture, ma in questo caso il numero
dei campi e' variabile, dipende cioe' dal numero di prodotti che il cliente
ha ordinato.
Cosa fare?
1. creare una tabella con un numero esagerato di campi che in molti casi
rimarrebbero vuoti e occuperebbero inutile spazio con il rischio che in
qualche caso il numero di campi non sia sufficiente
2. creare una tabella fatture che in un solo campo richiama un file
sequenziale dove sono scritti quantita' prodotti, codici prodotti e
quantita' ordinate?
3. che altro?
Penso che il problema sia comune e qualcuno sappia indicarmi la soluzione
piu' efficace adottata in questi casi
Grazie, Roby.

3. che altro?
Tabella Fatture:
ID_Cliente
ID_Ordine
ID_Prodotto
ID_Cliente è il codice univoco del cliente, chiave primaria della tabella Clienti
ID_Ordine è idem come sopra per la tabella Ordini
ID_Prodotto è idem come sopra per la tabella prodotti
Ovviamente è uno schizzo, magari ID_Ordine o ID_Cliente non servono, dipende da come hai strutturato
il db, ma quello che volevo solo farti capire che così facendo il numero di prodotti in fattura non
è nient'altro che il numero di record. Gli altri due campi servono da filtro, per identificare i
prodotti appartenenti ad una stessa fattura (o magari tutti i prodotti fatturati ad un cliente, ecc)
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 ha scritto nel messaggio
news:or6K6.7872$B87.5...@news.infostrada.it...

Io inserirei una tabella intermedia tra le tabelle Fatture e Prodotti (tra
le quali è presente una relazione molti a molti), chiamandola ad es.
Prod_Fatt.
I campi dovrebbero essere:
ID_Fatt            id della fattura
ID_Prod          id del prodotto nella fattura
Qta_Prod        quantità di questo prodotto presente in questa fattura
Ciao

Prova a vedere/leggere qualcosa sul Modello Entità-Relazione nel costruire
le tabelle del tuo DataBase. Sicuramente non sarà una cosa immmediata ma
poi ti sarà utile per i prossimi lavori.
Provo a spiegarti velocemente :
Tabella Prodotti (un prodotto avrà il codice univo ID_PRODOTTO)
Tabella Clienti (un cliente avrà il codice univo ID_CLIENTE)
Queste tabelle sono in relazione tra loro, cioé:
    Un prodotto può essere ordinato/fatturato da 1 a N clienti;
    Un cliente può ordinare/fatturare da 1 a M prodotti;
    Quindi c'è una relazione ORDINE (o Fatture) detta (N a M).
    Ora si crea una tabella Ordine con soli 2 campi:
        ID_PRODOTTO_ORDINATO (con tipo uguale a ID_PRODOTTO)
        ID_CLIENTE_ORDINATO (con tipo uguale a ID_CLIENTE)
    Quando il cliente (es. ID_CLIENTE = 1) farà un ordine/fattura
    di 2 prodotti (e.: primo prodotto ID_PRODOTTO = 3 e secondo prodotto
    ID_PRODOTTO = 20)
    Questi Ordini/Fatture saranno inserite nella tabella ORDINE,
    avendo nella tabella:
        ID_PRODOTTO_ORDINATO        ID_CLIENTE_ORDINATO
        3                                                        1
        20                                                      1
    Così quando vorrai sapere gli ordini/fatture del cliente Tiziano (es.
ID_CLIENTE = 1)
    basta che fai una :
                          Select * From ORDINE Where ID_CLIENTE_ORDINATO = 1
Spero che quello che cercavi è questo, altrimenti sono un tontolone.......
Tiziano

 ha scritto nel messaggio
news:9dbbgc$nia$1...@pinco.nettuno.it...


 1
Non vorrei scoraggiarti, ma temo non ti sia sufficiente:
Aspettati che il cliente ti faccia notare che:
a) vuole poter inserire una riga fattura con prezzo diverso da quallo di
listino / dei listini
b) vuole poter inserire uno sconto riga su quell'articolo e solo quello
c) "e che", se volessi inserire una riga di commento come posso fare?
d) e se per caso la descrizione dell'articolo deve essere diversa su questa
riga?
e) e l'aliquota iva di questa riga non può essere diversa, per esempio
perchè volgio fare un omaggio?
etc...
etc...
etc...
ergo: non sperare che una tabella di cross fra l'archivio Ordini (o fatture)
e l'archivio prodotti / listini sia sufficiente, prepara una autentica
tabella "righe fattura" con tutti i campi del caso, naturalmente rispettando
i suddetti vincoli di integrità...
ciao
ugo

perchè volgio fare un omaggio?
Se dovessi adattare il codice a questo punto inserireuna nuova tabella
INFORMAZIONI con i seguenti campi:
ID_INFO (codice univoco)
PREZZO_DIVERSO (a)
SCONTO (b)
COMMENTO (c)
NEW_DESCR (d)
ALIQUOTA (e)
Il campo ID_INFO verrà inserito nella tabella ORDINI creando così una
relazione con le altre 2 tabelle (CLIENTI e PRODOTTI). In modo che
quando un cliente ordina un prodotto avrò delle informazioni che descrivono
cosa gli è stato dato (es: sconto e new_descr) e gli altri campi della
tabella
Informazioni saranno vuoti.
Tiziano
ogni ordine di u