Ciao, grazie della risposta. Temo che ci sia stato un problema di comprensione.
OsvaldoLaviosa ha scritto:
C'è un po' di confusione, ma possiamo venirne a capo. Non so cosa sia una "classe di associazione"
Classe di associazione
Ossia quella che più avanti tu descrivi come "tabella di congiunzione" è esattamente la stessa cosa.
OsvaldoLaviosa ha scritto:
Partiamo dal presupposto che ogni tabella deve sempre avere un campo (generalmente ID contatore) chiave primaria. Questo campo non appare in tabella Clienti e devi aggiungerlo (IDCliente).
Appunto,
Holy87 ha scritto:
Quelli con * sono le chiavi primarie.
(in Clienti la chiave primaria è la PartitaIVA, come è evidente)
OsvaldoLaviosa ha scritto:
Le tre tabelle mancano di relazioni e di campi di richiamo ai campi chiave, in gergo si chiamano "chiave esterna".
E ancora, ho scritto
Holy87 ha scritto:
...dove Fattura e Articolo sono chiavi esterne che si riferiscono rispettivamente agli ID di Fatture e Articoli.
OsvaldoLaviosa ha scritto:
Un Cliente può acquistare molti Articoli, ma anche un Articolo può essere acquistato da molti Clienti, quindi esiste una relazione molti-a-molti fra le tabelle Clienti e Articoli. In questi casi occorre una tabella di congiunzione dove creare due relazioni uno-a-molti. La tabella Fatture risolve egregiamente a questo utilizzo,...
Andiamoci piano. L'associazione tra clienti e fatture è da uno a molti, il cliente può avere più fatture, ma una fattura è assegnata a un solo cliente. È la fattura che può avere un'associazione da molti a molti con gli articoli.
OsvaldoLaviosa ha scritto:
però devi aggiungere due campi "chiave esterna" numerici che si chiamano IDCliente e IDArticolo...per comodità di lettura ti consiglio di chiamare i due campi ID* in maniera più esplicita IDArticolo e IDFattura.
Mi ero accorto di questa mancanza, e ho tempestivamente provveduto a rinominare i campi e riaggiustare il database. Ora si presenta così:
Articoli(IDArticolo*, Nome, Costo, Prezzo,
IDFornitore)
Clienti(IDCliente*, Nome, Indirizzo, Telefono, PIVA)
Fornitori(IDFornitore*, Nome, Indirizzo, Telefono, PIVA)<-non che serva alla nostra causa
Fattura(IDFattura*, Numerazione,
IDCliente, Data)
Elenchi(IDElenco*,
IDFattura,
IDArticolo, Quantità)
dove quelli con l'asterisco * sono chiavi primarie, quelli in corsivo sono chiavi esterne.
Fatto questo, ho creato una maschera con sottomaschera, che adempie esattamente a quello che mi serviva.
Ora però ho un altro problema: la maschera mi chiede di digitare l'ID del cliente e gli ID degli articoli nella fatturazione, ma io vorrei che invece venisse inserito il nome perché più facile da ricordare.