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?

Monde réel des bases de données de près de jamais utiliser un produit cartésien.
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