L'Algèbre relationnelle - Produit Cartésien vs Jointure Naturelle?
Je suis à étudier pour les examens et je suis à défaut de trouver un critère solide qui me permette de déterminer si le Produit Cartésien x
est utilisé ou si Jointure Naturelle |X|
doit être utilisé.
J'ai dû venir avec un guide approximatif:
"Si vous avez besoin de projeter un attribut qui a le même nom qu'un attribut dans la table joint vous devez utiliser x
et de l'état de la table des noms à être projeté: tableA.colname1 = tableB.colname1
"
Ceci, cependant, ne le suivez pas certaines des solutions dans mes notes et mon professeur semble utiliser x
avec la convention susmentionnée ou |x|
de façon interchangeable.
Quelqu'un aurait-il une règle qui peut être suivie pour définir l'utilisation de l'un sur l'autre?
Prendre l'exemple de ce schéma (uniquement schéma liées à la question citée par souci de concision):
takes(ID, course_id, sec_id, semester, year, grade)
student(ID, name, dept_name, tot_cred)
Q) Trouver le nom de tous les étudiants qui ont participé à des cours qui ont été dispensés en Printemps 2011 à l'Automne 2011.
Ma réponse tentative:
π name(σ semester="Spring" ^ year=2011(takes ⋈ student)) ∪ π name(σ semester="Autumn" ^ year=2011(takes ⋈ student))
Réelle réponse:
π name(σ semester="Spring" ^ year=2011 ^ takes.ID=student.ID(takes x student)) ∪ π name(σ semester="Autumn" ^ year=2011 ^ takes.ID=student.ID(takes x student))
Quelqu'un peut-il fournir une raison pour expliquer pourquoi?
Dans mon esprit, la Jointure Naturelle serait de prendre soin de la takes.ID=student.ID
?
Joel, je suis en désaccord. J'ai souvent trouvé le produit cartésien utile "dans le monde réel".
J'ai utilisé aussi... mais c'est rare.
Chaque SQL
inner join on
est un cartésien/croix-produit suivi par un filtre. PS Vos en gras italique quote n'a pas de sens. Projection ne nécessite pas une jointure. Veuillez utiliser assez de mots, des phrases, des descriptions & des phrases de dire clairement ce que tu veux dire. Par exemple: Il n'est pas "l'état de la table des noms à être projeté", c'est la table des noms intérieure rejoint sur--bien que ce que vous vraiment dire, c'est la condition que vous voulez une jointure interne ou équi-joi ou theta-jointure pour être sur, c'est à dire la condition que vous voulez comme un filtre après une jointure croisée ou cartésienne de jointure ou d'un produit.OriginalL'auteur Myles Gray | 2013-01-02
Vous devez vous connecter pour publier un commentaire.
Une jointure naturelle, comme je le comprends, est une projection, filtrée produit Cartésien:
Dans cette hypothèse, votre réponse est isomorphe à la réponse exacte.
Pour voir cela, vous pouvez étendre la jointure naturelle de la séquence ci-dessus des opérateurs, et les faire flotter autour en utilisant les lois de l'algèbre relationnelle. Vous verrez que la projection disparaît à cause de la projection de
name
, et le critère de sélection est fusionnée avec la sélection ci-dessus. Vous vous retrouverez avec exactement le même arbre que la réponse réelle, même si vous n'avez jamais changé le sens de votre propre réponse!Je ne peux penser à une raison pourquoi votre maître de conférences utilise ces concepts de façon interchangeable: votre professeur veut vous faire comprendre que ces concepts peut être utilisés de façon interchangeable, parce que "la jointure naturelle est juste un raccourci" (même si c'est discutable).
r ⋈ s == π r.A, r.B, r.C, r.D, s.E (σ r.B = s.B ^ r.D = s.D (r x s))
pour dire de schéma: R(A,B,C,D) et S(B,D,E)?Oui! 🙂 Au moins, c'est comment je le comprends.
Bon, ça fait sens pour moi, juste inquiet que les "réponses" afficher uniquement les 1 solution au problème, alors qu'en fait il y a 2 et je voudrais être marqué incorrect.
Il y a trop de réponses possibles, et que le plus petit serait appelé à corriger. Votre solution est plus petite que la solution réelle, donc si vous avez été autorisé à utiliser ⋈, votre réponse est "plus correct". Il y a encore plus court de solutions possibles. Flotter les projections sur l'ensemble de l'union, et vous économiserez de vous-même un opérateur.
Bon point, mais je ne sais pas qui soit. Cela dépend vraiment de ce que les opérateurs vous êtes autorisé à l'utiliser. Si vous ne pouvez pas utiliser une disjonction logique, il vous suffit de à utiliser l'ensemble de l'union. Mais si vous le pouvez, alors c'est presque le plus court possible réponse.
OriginalL'auteur
Produit cartésien est qu'un cas particulier de la jointure naturelle où l'a rejoint les relations n'ont pas de noms d'attributs en commun. Dans Codd d'origine de l'algèbre de renommage est une opération distincte tout à fait. Pour obtenir un vrai produit cartésien de deux relations qui ont certaines caractéristiques en commun, vous devez renommer les attributs avant de faire l' (naturel) rejoignez.
Dans un souci de concision, les changements de nom sont parfois laissé des exemples écrits et le produit de symbole utilisé à la place. Malheureusement, cela obscurcit le point important, qu'il existe un seul type de jointure.
OriginalL'auteur nvogel