2010-12-11 3 views
0

Première fois que je rencontre une algèbre relationnelle pour la question des bases de données aujourd'hui, et je n'arrive pas à trouver la réponse.Syntaxe d'algèbre relationnelle

J'ai 3 tables, Batch, Channel et Market.

Batch est connecté à Channel et Market par les touches foregein (channelID, marketID).

Quelle est la notation correcte pour une requête de ce genre:

select * from batch, channel, market 
where batch.channelID=channel.channelID AND batch.marketID=market.marketID 

Merci


Si je comprends bien, je dois écrire comme suit:

π...(Batch⋈         Channel⋈        Market 
      (batch.channelID=channel.channelID)  (batch.marketID=market.marketID) 

Répondre

3

Ce serait lot ⋈ canal ⋈ marché (naturel j les oins sont associatifs et commutatifs).

EDIT: puisque les noms d'attributs sont les mêmes pour chaque JOIN (vous comparez batch.channelID avec channel.channelID), vous êtes dans une situation où la requête peut être écrit avec les jointures naturelles, et il n'y a pas besoin d'écrire (xxx = yyy) sous l'opérateur when lorsqu'il représente une jointure naturelle.

Vous pourrait écrire comme θ-joint à la place, dans ce cas, votre syntaxe serait presque correcte, mais je pense que l'utilisation θ-joint pour représenter les jointures naturelles manque genre de point. Le changement que vous devez faire est que, puisque θ-jointures ne sont pas associatives, vous devez ajouter des crochets: (lot ⋈ canal) ⋈ marché

+0

Bonjour, je ne suis pas sûr d'avoir compris. Ma mise à jour est-elle correcte quant à la façon dont je devrais écrire la sous-notation des champs de jointure? (Je suis requis pour décrire la requête complète). – Amirshk

+0

Merci, très utile – Amirshk

Questions connexes