Ciao a tutti.
Ho un quesito da porvi sui join naturali appartenenti all'algebra relazionale.
Espongo il testo dell'esercizio:
Siano R1(X1) e R2(X2) schemi di relazione, l'intersezione di X1 e X2 è non vuota e r1 e r2 sono istanze di R1 e R2 rispettivamente. Inoltre, per ogni tupla t1 che appartiene ad r1 esista una tupla t2 appartenente a r2 tale che t1[intersezione di X1 e X2] = t2[intersezione di X1 e X2].
Le domande sono:
1. E' possibile che |r1 * r2| < |r2| ?
2. Dimostrare che |r1 * r2| >= |r1|
Ho le soluzioni/dimostrazioni a entrambi i quesiti e ve li riporto.
1. Sì, è possibile che succeda; ecco un esempio: basta prendere |r1| = 0 e |r2| = 1 da cui risulta |r1 * r2| = 0 ===> |r1 * r2| < |r2|.
2. E' sufficiente dimostrare che è falso il contrario, ovvero che |r1 * r2| < |r1|. Prendiamo t1' = t1'', entrambe queste tuple appartenenti a r1. Allora t1' e t1'' appartengono a r1 * r2 (dato che t1' e t1'' appartengono a r1). E' ovvio che t1'[X1] = t1 <> t1''[X1] = t1''. Non è possibile avere quindi più tuple in r1 rispetto a r1 * r2.
( <> significa diverso )
La mia domanda iniziale, confrontando i due esercizi, è questa: come è possibile che sia possibile che |r1 * r2| < |r2| e allo stesso tempo non lo sia |r1 * r2| < |r1| ?
Sembra come che il join naturale non sia commutativo, oppure probabilmente sto sbagliando io a interpretare i dati o qualcos'altro.
Grazie mille in anticipo a tutti voi per le risposte che mi darete!![]()