You are on page 1of 21

Lecture 5:

Relational calculus

www.cl.cam.ac.uk/Teaching/current/Databases/
1
Relational calculus
• There are two versions of the relational
calculus:
– Tuple relational calculus (TRC)
– Domain relational calculus (DRC)
• Both TRC and DRC are simple subsets of first-order
logic
• The difference is the level at which variables are
used: for fields (domains) or for tuples
• The calculus is non-procedural (‘declarative’)
compared to the relational algebra
2
Domain relational
calculus
• Queries have the form

{<x1,…,xn>| F(x1,…,xn)}

where x1,…,xn are domain variables and F


is a formula with free variables {x1,…,xn}
• Answer: all tuples <v1,…,vn> that make
F(v1,…,vn) true
3
Example
Find all sailors with a rating above 7

{<I,N,R,A> | <I,N,R,A>Sailors  R>7}

• The condition <I,N,R,A>Sailors ensures


that the domain variables are bound to the
appropriate fields of the Sailors tuple

4
Example
• Simple projection:

{<I,N> | R,A.<I,N,R,A>Sailors}

• Simple projection and selection:

{<I,N> | R,A.<I,N,R,A>Sailors  N=`Julia’}

5
DRC formulae
• Atomic formulae: a ::=
– <x1,…,xn>R
– xi binop xj, xi binop c, c binop xj, unop c, unop xi
• DRC Formulae: P, Q ::=
–a
 P, PQ, PQ
 x.P
 x.P
• Recall that x and x are binders for x
6
Example
Find the names of sailors rated >7 who’ve
reserved boat 103

{<N> | I,A,R.<I,N,R,A>Sailors 
R>7 
SI,BI,D.(<SI,BI,D>Reserves 
I=SI  BI=103)}

• Note the use of  and = to ‘simulate’ join


7
Example
Find the names of sailors rated >7 who’ve
reserved a red boat

{<N> | I,A,R.<I,N,R,A>Sailors 
R>7 
SI,BI,D. (<SI,BI,D>Reserves 
SI=I 
B,C. (<B,C>Boats 
B=BI  C=‘red’))}
8
Example
Find the names of sailors who have
reserved at least two boats

{<N> | I,R,A. <I,N,R,A>Sailors 


BI1,BI2,D1,D2.<I,BI1,D1>Reserves 
<I,BI2,D2>Reserves 
BI1BI2 }

9
Example
Find names of sailors who’ve reserved all
boats

10
Example
Find names of sailors who’ve reserved all boats
{<N> | I,R,A. <I,N,R,A>Sailors 
B,C. ((<B,C>Boats) 
(<SI,BI,D>Reserves.
I=SI  BI=B)) }
{<N> | I,R,A. <I,N,R,A>Sailors 
<B,C>Boats.
<SI,BI,D>Reserves.
I=SI  BI=B)) }
11
Tuple relational calculus
• Similar to DRC except that variables range
over tuples rather than field values
• For example, the query “Find all sailors
with rating above 7” is represented in TRC
as follows:
{S | SSailors  S.rating>7}

12
Semantics of TRC queries
• In general a TRC query is of the form
{t | P}
where FV(P)={t}
• The answer to such a query is the set of
all tuples T for which P[T/t] is true

13
Example
Find names and ages of sailors with a rating
above 7

{P | SSailors. S.rating>7
P.sname=S.sname
P.age=S.age}

Recall P ranges
over tuple values
14
Example
Find the names of sailors who have
reserved at least two boats

{ P | SSailors.
R1Reserves. R2Reserves.
S.sid=R1.sid  R1.sid=R2.sid 
R1.bid  R2.bid 
P.sname=S.sname}

15
Equivalence with
relational algebra
• This equivalence was first considered by
Codd in 1972
• Codd introduced the notion of relational
completeness
– A language is relationally complete if it can
express all the queries expressible in the
relational algebra.

17
Encoding relational
algebra
• Let’s consider the first direction of the
equivalence: can the relational algebra be
coded up in the (domain) relational
calculus?
• This translation can be done systematically,
we define a translation function [-]
• Simple case:
[R] = {<x1,…,xn> | <x1,…,xn>R}

18
Encoding selection
• Assume
[e] = {<x1,…,xn> | F }

• Then
[c(e)] = {<x1,…,xn> | F  C’}

where C’ is obtained from C by replacing


each attribute with the corresponding variable
19
Encoding relational
calculus
• Can we code up the relational calculus in the
relational algebra?
• At the moment, NO!
• Given our syntax we can define ‘problematic’
queries such as
{S |  (SSailors)}
• This (presumably) means the set of all tuples
that are not sailors, which is an infinite set… 

20
Safe queries
• A query is said to be safe if no matter how we instantiate
the relations, it always produces a finite answer
• Unfortunately, safety (a semantic condition) is
undecidable 
– That is, given a arbitrary query, no program can decide if it is
safe
• Fortunately, we can define a restricted syntactic class of
queries which are guaranteed to be safe 
• Safe queries can be encoded in the relational algebra

21
Summary
You should now understand
• The relational calculus
– Tuple relational calculus
– Domain relational calculus
• Translation from relational algebra to
relational calculus
• Safe queries and relational completeness
Next lecture: Basic SQL
22

You might also like