
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