Relazione molti a molti

lunedì 27 aprile 2009 - 15.08

thebestmaster89 Profilo | Newbie

Ho 3 tabelle: la prima contenente le informazioni sui clienti, la seconda che contiene i prodotti ed una terza ipotetica che dovrebbe contenere i listini da applicare al prodotto per uno specifico cliente. La relazione sembra essere del tipo molti a molti in quanto un cliente può comprare più prodotti e un prodotto può avere più di un aquirente. Se consideriamo la tabella clienti con 1000 record e quella dei prodotti con altrettanti record; la tabella di relazione in teoria dovrebbe contenere 1000 * 1000 = 1.000.000, dove per ciascun record avrei: CODICE_CLIENTE | CODICE_PRODOTTO | PREZZO.
Siccome lavoro su dispositivi mobili utilizzando SQL Server Compact Edition 3.5 reputo abbastanza impensabile riempire la tabella di un milione di record anche perchè occuperebbe uno spazio enorme e mi farebbe fare delle query lente come lumache. Avete qualche metodo da consigliarmi per velocizzare e snellire il tutto, tenendo conto che un listino è possibile applicarlo a più clienti quindi molti record si ripetono inutilmente?

Ringrazio anticipatamente tutti quelli che si interesseranno al problema.
Ciao a tutti

lbenaglia Profilo | Guru

>Ho 3 tabelle: la prima contenente le informazioni sui clienti,
>la seconda che contiene i prodotti ed una terza ipotetica che
>dovrebbe contenere i listini da applicare al prodotto per uno
>specifico cliente. La relazione sembra essere del tipo molti
>a molti in quanto un cliente può comprare più prodotti e un prodotto
>può avere più di un aquirente. Se consideriamo la tabella clienti
>con 1000 record e quella dei prodotti con altrettanti record;
>la tabella di relazione in teoria dovrebbe contenere 1000 * 1000
>= 1.000.000, dove per ciascun record avrei: CODICE_CLIENTE |
>CODICE_PRODOTTO | PREZZO.

Ciao Luca,

hai detto bene, TEORICAMENTE
Non è detto che ogni cliente acquisti tutti i prodotti e che un prodotto sia acquiatato da tutti i clienti, quindi in pratica le righe nella tabella di giunzione saranno molte meno.

>Ringrazio anticipatamente tutti quelli che si interesseranno
>al problema.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

thebestmaster89 Profilo | Newbie

Quindi come imposto la relazione se ad es. il prodotto 1 lo faccio pagare 10€ a 900 clienti e poi a 100 lo faccio pagare 9€? In teoria dovrebbero essere 2 soli record ma non so come impostarli.

lbenaglia Profilo | Guru

>Quindi come imposto la relazione se ad es. il prodotto 1 lo faccio
>pagare 10€ a 900 clienti e poi a 100 lo faccio pagare 9€? In
>teoria dovrebbero essere 2 soli record ma non so come impostarli.
Perché 2 righe? Per me sono 900 + 100 = 1000.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

thebestmaster89 Profilo | Newbie

Grazie x la risposta velocissima!

Ma se sono 1000 per il solo prodotto 1, se moltiplico per i 1000 prodotti a disposizione ottengo di nuovo 1 milione di record. Io invece auspicavo in una soluzione di "raggruppamento" che mi permettesse di creare una sorta di gruppo di clienti al quale applicare il listino. In questo modo al gruppo di 900 applico 10€ e a quello di 100 applico 10€. In questo caso risparmiavo un bel po' di risorse. Però magari non è possibile farlo. La mia era un'idea.

lbenaglia Profilo | Guru

>Ma se sono 1000 per il solo prodotto 1, se moltiplico per i 1000
>prodotti a disposizione ottengo di nuovo 1 milione di record.
Ma scusa, la tabella di giunzione devi precompilarla con tutte le combinazioni?

>Io invece auspicavo in una soluzione di "raggruppamento" che
>mi permettesse di creare una sorta di gruppo di clienti al quale
>applicare il listino. In questo modo al gruppo di 900 applico
>10€ e a quello di 100 applico 10€. In questo caso risparmiavo
>un bel po' di risorse. Però magari non è possibile farlo. La
>mia era un'idea.
Per farlo devi aggiungere una ulteriore tabella di raggruppamento, definendo struttura e relationship in base alla tua analisi.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

thebestmaster89 Profilo | Newbie

>Ma scusa, la tabella di giunzione devi precompilarla con tutte le combinazioni?
Purtroppo me la devo compilare "a mano" (da codice) in quanto ho un gestionale che mi passa un file di testo con i listini dei soli clienti che variano e un listino base che deve essere applicato a tutti gli altri. Dove non vi è un listino specifico deve essere applicato un prezzo base. In pratica non è da compilare con tutte le combinazioni la mia tabella listini, però un prodotto può potenzialmente essere venduto a chiunque, quindi un prezzo deve averlo per forza.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5