16/01/2025 - Mailman ha scritto:
Mi permetto di segnalare una ulteriore possibile criticita': le relazioni indicate sopra sono tutte "commutative" ovvero in caso di ricerca di un IDUser in entrambi i campi IDUser1 o IDUser2 puoi ritrovare il tipo di relazione.
Il problema potrebbe essere se utilizzi relazioni di tipo "Padre", oppure "figlio", "nonno": allora in questo caso la cosa si complica: e' chiaro che se IDuser1 e' padre di IDuser2 non puo' essere vero il contrario... Per cui serve attenzione nell'inserimento dati e nell'eventuale successiva interrogazione.
Poi mi domando: con una query come hai indicato sopra: che tipo di dati Ti aspetti di ricevere? E' ovvio che non restituisca nulla: mancano i parametri di ricerca ed inoltre compare due volte il campo Nome della prima tabella...
La relazione "NONNO" è fondamentalmente un modo per non gestire in modo ricorsivo le relazioni gerarchiche quando sono limitati, in questo caso a 2 Livelli, perchè il modo corretto sarebbe gestire le relazioni con salti da 1Livello, usando le ricorsioni, esattamente come fa il TreeView.
Immaginiamo di gestire salti Multilivello... Bisnonno, Trisnonno ecc, dove ci fermiamo..., questi sono solo termini convenzionali per definire relazioni di 2°-3° o 4° Livello ma non è tecnicamente di buon senso.
La relazione "NONNO" quindi non dovrebbe esistere perchè di livello 2 e scomponibile gerarchicamente in 2 Relazioni di livello 1, esiste pertanto Padre e Padre del Padre, ovvero 2 salti di 1 livello che sembra meno semplice ma invito a riflettere....
Questo infatti, l'uso di "NONNO" intendo, è ragionevolmente fattibile, ma obbliga ad inserire un record in più... perchè costringe a definire sia la relazione Nipote-Nonno, che 2 Relazioni Figlio-Padre, altrimenti non potresti tracciare tutte le parentele, mentre usando una normale relazione basata su 1 salto di Livello, che genera ricorsione, bastano 2 Relazioni definite, ovvero Padre-Figlio e Padre-Figlio, automaticamente il 2° Livello di Padre è il Nonno e mantieni la gerarchia completa.
A---(padre)--> (B)
B---(padre)--> (C)
Questo chiarisce con solo 2 inserimenti che C è in relazione livello 2 con A, convenzionalmente Nipote-Nonno
Usando Nonno è indiscutibile che la relazione Nonno sia superflua ma...:
A---(Nipote)-->(C) (relazione superflua, le 2 relazioni sotto già contengono questo legame)
A---(padre)--> (B)
B---(padre)--> (C)
Provate ad esempio a pensare come rappresentare in un TreeView la relazione Nonno ed anche la relazione Padre-Figlio, vi trovereste con nodi inutili perchè il Nipote verrebbe rappresentato sotto Nonno come Nipote e sotto Figlio del Figlio... non è proprio il massimo, mentre è estremamente lineare esplodere il Nonno trovarci i Figli ed esplodere i Figli e trovarci i Figli(Nipoti del Nonno per definizione).
Ciò detto come spiegato all'inizio ma comprendo non siano concetti facili per tutti, l'estrazione di Query con Relazioni Multilivello non è gestibile, se non ingessando il sistema... finchè parliamo di Padre Figlio senza una vera cerarchia MultiLivello va bene, ma già dal 2° Livello io abbandonerei andando sulla ricorsione.
Aggiungo che le relazioni inserite nel ER non sono corrette si aggiunge la seconda istanza della Tabella Anagrafica e si collega la PK della 2° istanza alla FK di Relazione della Tabella Relazioni, se non solo per chiarimento grafico e concettuale.