Newsgroup: it.comp.appl.access
Titolo: relazione fra record della stessa tabella

 
          salve a tutto il ng
ho una tabella "contatti" in cui devo impostare dei collegamenti fra i vari
record in maniera tale da poter avere una scheda contatto dove aver
visualizzati i vari contatti collegati.
Ho pensato di usare una tabella con i campi:
1 id
2 contatto1 (es pippo)
3 contatto2 (es pluto)
il problema č che cosě facendo nella scheda di pippo devo far riferimento al
contatto2 mentre nella scheda di pluto devo far riferimento al contatto1.
Mi sono incartato
Grazie per l'aiuto
Ezio
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Non ho ben capito a cosa ti serve (e se č stato ben normalizzata la tabella) 
ma tu puoi avere diverse istanze della stessa tabella e linkarle tra loro.
Avrai Tabella1 e Tabella1_1: i link saranno applicati alla stessa tabella
MAssimiliano 


          Cerco di spiegarmi meglio.
ho una tabella "contatti".
Pippo č amico di pluto e paperino (e nella scheda di pippo deve esserci un
link a pluto e paperino), pluto č amico di pippo, paperino e clarabella (e
nella scheda di pluto deve esserci un link a pippo, paperino e clarabella).
Come realizzo in pratica i collegamenti fra i record?


 Ezio
Secondo me stai sbagliando relazioni.
Se non ho frainteso serve una relazione 1--Molti.
Dove:
Tabella Elenco Personaggi(Lato 1)
Tabella Elenco Amicizie    (Lato Molti)
E' vero infatti che ogni personaggio può avere molti amici.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


          hai ragione serve una relazione 1 a molti.
Il problema è che la tabella è unica (elenco personaggi). come posso
collegare il personaggio 1 al 2/3/4 e poi nella maschera dei personaggi
2/3/4 ritrovare il collegamento al personaggio 1.
Grazie e ciao
Ezio Pizziconi


 Ezio Pizziconi
Cosa ti devo dire...?
Per me non si può, ma se ritieni fattibile limitare
a 3 i collegamenti inserisci 3 Campi Aggiuntivi con
Relazione1
Relazione2
Relazione3
E' assurdo ma se hai l'obbligo di lavorare in MonoTabella
non hai molte alternative.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


          Non ho questo obbligo, il problema č che attualmente ho solo una tabella.
Dovrei forse replicarla con solo i campi id e nomecognome e poi collegare i
campi di tabella 1 a quelli della tabella replica per avere i collegamenti
ma cosě facendo non ho i collegamenti inversi (fra i record di tabella
replica e quelli di tabella master).
In pratica io ho bisogno di realizzare in un db access una situazione
identica a quella ottenuta dai contatti di Outlook, dove aprendo la scheda
del contatto puoi inserire nel campo Contatti.. i nomi dei contatti
collegati. A quel punto nella scheda del contatto collegato mi ritrovo il
link al contatto in cui ho inserito il collegamento.
Non so se questo č possibile e come.
Ciao,


 Ezio Pizziconi
Non devi duplicare la tabella che già hai. Crei una tabella 'Amicizie' con
due campi numerici, in cui registri gli accoppiamenti, per esempio se 1 è
amico di 2 e 4; e 2 è amico di 1, 4 e 5 avrai:
  1  2
  1  4
  2  1
  2  4
  2  5
L'unica particolarità è data dal fatto che le amicizie solitamente sono
biunivoche, quindi quando inserisci la coppia '1 è amico di 2' dovrai
stare attento ad inserire anche l'inversa, '2 è amico di 1' altrimenti
potrai ritrovarti nella situazione paradossale che 1 è amico di 2 ma 2 non
è amico di 1.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


          scusami ma mi sembra una strada poco percorribile.
grazie comunque


 Namor
Premetto che quanto dici è Legge.
Forse si potrebbe evitare questa complicazione istanziando 2
volte la tabella Principale e relazionandola al campo Amicizia.
In questo caso si potrebbe estrarre una Query che lega in Reverse
l'estrazione.
E' da provare ma potrebbe essere fattibile.


Alessandro Baraldi ha scritto:

[CUT]


Dovresti istanziarla 4 volte nella query, la principale più una per
ciascun campo amico1, amico2, amico3.
Però così limita il numero di amici, oltre che violare le regole di
normalizzazione, mentre l'altra soluzione è più flessibile, sia per
l'assenza di limiti sul numero di amici che per la maggior semplicità nel
costruire le query.
Dando per scontato che l'amicizia sia biunivoca non serve nemmeno inserire
le coppie di chiavi reverse (es: 1-3, 3-1), basta impostare in fase di
ricerca i criteri in Or su entrambi i campi o istanziare due volte nelle
query la tabella 'amicizie' relazionando la chiave della tbl principale
con entrambi i campi della secondaria. In questi casi però bisognerebbe
verificare di NON inserire i record reverse, che genererebbero dei
duplicati nell'output delle query. Pertanto una verifica durante
l'inserimento è necessaria in entrambi i casi, a meno che non si usi un
DISTINCT nelle query per eliminare i doppioni.


 namor at inwind punto it
Che la cosa fosse scorretta era il primo punto, ma vista l'impossibilità
dichiarata
di lavorare secondo Normalizzazione un metodo lo deve pur trovare.
A fronte di una errata struttura sai bene che accrocchi si devono fare per
fare in modo di ottenere qualche cosa di leggibile, non mi meraviglierei di
PAGINATE di codice per far quadrare il cerchio.....!!!!
Che ci vuoi fare.....!
Ciao Marco


 Ciao Marco
Ha detto che non ha l'obbligo di mantenere un'unica tabella. Penso
piuttosto che si sia fatto un'idea di una possibile soluzione e voglia
continuare su quella. Niente da dire, l'avremo fatto anche noi agli
inizi... poi ci si accorge di quanto sia difficile gestire un db non
progettato bene e si fa tesoro dell'esperienza per le volte successive.
Io la mia parte l'ho fatta, ho spiegato come farei io se avessi quel
problema, ma non è detto che sia l'unico modo o il migliore.
Ciao.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
