Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
[SQLSERVER2008] Relazioni tra tabelle.
Ultimo Post 05 mag 2010 20.18 by Sabrina (DNW TEAM). 5 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi Risolto

Posts:54

--
28 apr 2010 14.30  
Ciao a tutti, da tempo cerco una soluzione ideale al seguente problema. Sto creando un registro chiamate che oltre alla data, all'ora e alla durata, mostri  pure il numero chiamante e, in un altro campo, la relativa anagrafica, quindi il numero chiamato e l'anagrafica.
Progettando la base dati (uso SQL server 2008) ho creato una tabella contatti, una tabella anagrafiche ed una tabella numeri. Le ultime due tabelle sono legate da una relazione uno-a-molti (ad ogni numero possono corrispondere anche più anagrafiche), via codice (vb.net 2008 e LinqToSql) poi associo i dati alla tabella contatti.
L'operazione, se fatta su un numero considerevole di righe, è molto dispendiosa. Mi chiedevo se mi potreste suggerire un'alternativa a questa progettazione che abbia migliori prestazioni. Sicuramente ci sarà un modo migliore per progettare le tabelle e le loro relazioni, tanto più che in seguito ho la necessità di poter fare ricerche, anche complesse, tra questi dati. Grazie mille.
Giovanni

Posts:811

--
04 mag 2010 16.00  
Non riesco a capire cosa sia un'anagrafica rispetto ad un contatto, un indirizzo o una persona?
A parte ciò, usualmente per le liste di ricerca si utilizzano delle join e se ti trovi in difficoltà a causa della lentezza è opportuno verificare sul SQL Management Studio qual'è il query plan che viene effettuato dal server e verificare se opportuno creare degli indici sui campi per velocizzare le query.
Non conosco Linq To Sql ma se genera delle query con un wizard è probabile che non siano il massimo dell'ottimizzazione, soprattutto se poi effettui delle pivot per porre in orizzontale i numeri telefonici.
detto questo, magari dacci qualche informazione in più e vediamo come darti una mano.
saluti
Sabrina
Sabrina

Posts:54

--
04 mag 2010 18.53  
Intanto grazie Sabrina.
Vado con le dovute spiegazioni. Per contatto intendo la telefonata (data, ora, durata, num. chiamante, num.chiamato) per anagrafica intendo (nome, cognome ecc.) dei numeri chiamanti e chiamati.
Come si può vedere, per ogni telefonata c'è, appunto, un num. chiamante e un num. chiamato, a fianco di queste due voci vorrei associare le anagrafiche p.e.
04/05/2010 | 15:34 | 156 | 333123456 | Giovanni Puglisi | 338654321 | Sabrina Cosolo.
Tenuto conto che nel tempo lo stesso numero può avere più anagrafiche (ciascuna contiene campi come data attivazione e data disattivazione)  è necessario associare quella giusta in base alla data della chiamata.
Ho bisogno di sapere se lo schema di progettazione già descritto e funzionante è valido o se ci sono alternative che rendono prestazioni migliori.
Purtroppo la mia esperienza su tutto quanto riguarda la programmazione e le basi dati deriva da autoistruzione attraverso manuali (tanti e costosi!) e internet.
Non so cosa posso aggiungere, chiedi e cercherò di essere più preciso. 
A presto.
Giovanni

Posts:811

--
05 mag 2010 10.57  
 Spero mostri una faccia perplessa...
Allora Giovanni, adesso che ho capito cosa intendi per contatto (per me il contatto è una azienda e quello che tu chiami contatto si chiama telefonata) posso fare dei commenti che non sono suggerimenti ma solo osservazioni di tipo personale.
A mio avviso, la connessione molti a molti che tu stai facendo non può essere basata sul numero di telefono, altrimenti avendo le anagrafiche che variano nel tempo ti ritrovi delle informazioni inconsistenti.
Se infatti i contatti ti servono come storico delle chiamate, tu devi sapere che una chiamata di due anni fa è stata fatta tra Sabrina e Giovanni, mentre quella di tre mesi fa è stata fatta tra Luca e Giovanni perché sabrina non lavora più per quell'azienda.

Il mio approccio in questo caso è dotare le tabelle di una chiave primaria univoca e agganciarle con quella, pertanto la tabella delle telefonate non ha scritto:

1|0432 789991 |Sabrina|0432 741160|Monica
2|0432 741160|Monica|0432 789991|Sabrina
3|3351234567|Claudio|34709876543|Luca

ma

1|25|74
2|74|25
3|22|86
4|22|128

dove 25 è l'ID univoco di Sabrina, 74 quello di Monica, 22 Quello di Claudio, 86    Quello di Luca ecc.

In questo modo, anche se nel tempo i numeri di telefono vengono associati ad anagrafiche diverse, tu comunque hai uno storico congruente ed in ogni istante, con una Join sulle anagrafiche sei in grado di visualizzare tutte le informazioni relative alla telefonata su cui ovviamente sarà registrata data, ora, durata ed altre informazioni oltre agli ID che permettono di mappare chiamante e chiamato.

Ovviamente se hai esigenze diverse questo può non essere fattibile, ma in questo caso, è opportuno denormalizzare i dati sulla tabella telefonate in modo da non perdere comunque la storia oppure in breve tempo non capisci più cosa è realmente successo.
HTH
Saluti
Sabrina







Sabrina

Posts:54

--
05 mag 2010 16.33  
Ciao Sabrina,
credo che con le mie definizioni ho creato un bel po’ di confusione. Tornando a noi. Come avevo cercato di descrivere sin da subito il tuo suggerimento era già in parte applicato. Infatti nella tabella “Contatti” o telefonate che dir si voglia succede questo:
ID|Data|ora|dur|IDnumChte|IDnumChto
dove IDnumChte e IDnumChto provengono (via codice) da una tabella “Numeri” relazionata uno a molti con una tabella “Anagrafiche”. Questo perché il momento dell’inserimento della telefonata (e quindi del numero) è diverso da quello d’inserimento dell’anagrafica. E’ la vista finale che dovrà accorpare numeri e anagrafiche corrette. Quest’ultimo particolare fa si che il suggerimento che mi hai dato sia impraticabile, appunto perché presuppone la conoscenza dell’interlocutore al momento della registrazione della telefonata.
Non so se sono stato più chiaro. Mi piacerebbe spiegarti meglio tutto ma avrei bisogno di un po’ di riservatezza. Non so se il forum la conceda. Credo di no!
A presto. Giovanni

Posts:811

--
05 mag 2010 20.18  
Puoi scrivermi in privato se non vuoi parlare in pubblico della struttura del database, trovi il link per contattarmi sul mio blog.
http://community.dotnetwork.it/sabrina/Default.aspx
clicca sull'opzione contact.

così forse puoi chiarirmi le idee e io posso darti dei suggerimenti in qualche modo intelligenti
saluti
Sabrina
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
Iniziare da Zero con WPF
Un occhiata al modello base del progetto Windows Application di WPF
2007/08/16 | Autore: Sabrina Cosolo
Memorizzare immagini in SQL Server
un'immagine per la memorizzazione su un campo Image di SQL Server e viceversa
2007/09/04 | Autore: Sabrina Cosolo
.NET e l'Interoperabilità COM
Come utilizzare Dll non referenziabili per convertire un documento Word in PDF
2008/07/05 | Autore: Massimo Lofrano
Miniguida alla OOP con il .NET Framework- Parte III
Un' importante eredità: l'ereditarietà
2009/02/08 | Autore: Alberto De Luca
Icone e Toolstrip
Icone della giusta dimensione e Toolstrip modificate a runtime
2009/06/28 | Autore: Sabrina Cosolo
Unit Testing del codice (parte 1)
Le basi per la costruzione di test per rendere più solido il nostro codice
2007/12/26 | Autore: Sabrina Cosolo
Introduzione a Windows Presentation Foundation (parte 2)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Autore: Patrizia Cosolo
Miniguida alla OOP con il .NET Framework- Parte II
Le Classi e l'Incapsulamento.
2008/10/09 | Autore: Alberto De Luca 
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.