Supposons que l'opérateur rename n (r)
renvoie une valeur de table comme r
mais avec de nouveaux noms d'attribut comme les anciens préfixés par n.
. Ensuite, nous avons:
/* rows where
(cid, sid, grade, gradepoint) in Enroll
and (x.cid, x.sid, x.grade, x.gradepoint) in Enroll
and gradepoint < x.gradepoint and cid = x.cid
*/
restrict gradepoint < x.gradepoint and cid = x.cid (
Enroll times rename x (Enroll)
)
(Quelles sont les lignes de la forme (cid, sid, grade, gradepoint, x.cid, x.sid, x.grade, x.gradepoint)
.)
Malheureusement, ce commentaire ne dit rien au sujet de la situation d'affaires. Donc, non plus la table. Mais supposons que dans notre cas (cid, sid, grade, gradepoint) in Enroll
quand in course
cid
student
sid
got grade
grade
& grade point average
gradepoint
. (Ceci est (caractéristique) prédicat de la table en termes d'affaires.) Ensuite, en remplaçant le in
nous obtenons que cette requête est:
/* rows where
in course cid student sid got grade grade & grade point average gradepoint
and in course x.cid student x.sid got grade x.grade & grade point average x.gradepoint
and gradepoint < x.gradepoint and cid = x.cid
*/
Chaque ligne d'une valeur de la table (résultat constant/variable ou requête) fait une déclaration de le brancher dans le prédicat de la table. (Et chaque ligne absente indique la négation/not
de l'instruction de la brancher dans le prédicat.) Le concepteur donne les prédicats constants/variables et le prédicat de résultat de requête provient de ceux & les opérateurs de relation. (restrict
& join
s (y compris times
& intersect
) introduisons and
, project
introduit there exists
, union
introduit or
, minus
introduit and not
, etc.)
Ici, la déclaration implique un cours et deux gradepoints, appartenant chacun à un étudiant différent . Il n'y a donc pas "où le point de pondération est inférieur à lui-même".
Forming a relational algebra query from an English description
Is there any rule of thumb to construct SQL query from a human-readable description?
(Un soi-disant « opérateur d'algèbre », comme vous le dites à « renommer » une valeur est vraiment un non-terminal langage de programmation pour l'attribution à une variable. C'est orthogonal à des valeurs d'algèbre & opérateurs.)
Se pourrait-il que dans l'algèbre relationnelle, l'ordre * des termes dans le prédicat de la sélection ait réellement de l'importance? – JohnSmithy1266
Non, @ JohnSmithy1266, l'ordre dans la sélection σ n'a pas d'importance, ni dans la projection π. Il n'y a pas d '«ordre de colonne» dans RA et l'accès est uniquement par nom d'attribut. Il n'y a pas non plus de dénomination d'attribut dot-prefix (utilisez-vous réellement SQL?) - quelle version de RA utilisez-vous? Je ne peux pas suivre votre notation. Par ρ (rho) renommer la relation «Enroll» à «x», je suppose que vous obtenez deux copies de chaque attribut découlant du produit cartésien. Vous correspondez uniquement à 'cid', donc vous aurez différents' sid's, 'grade's,' gradepoint's. – AntC
@ Antec Je ne savais pas qu'il y avait différentes variations de RA. J'utilise la norme enseignée dans un cours de l'école supérieure, je suppose. – JohnSmithy1266