0% found this document useful (0 votes)
97 views

Relational Model: Tuple Relational Calculus Domain Relational Calculus

The document discusses the relational model and tuple relational calculus (TRC) and domain relational calculus (DRC) for querying relational databases. It provides examples of relations in a banking database and example queries written in TRC and DRC. The key aspects of TRC and DRC are presented, including how queries are written as sets of tuples that satisfy a predicate and the use of quantifiers and variables. The concept of safe expressions is also introduced.

Uploaded by

Himanshu Patel
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
97 views

Relational Model: Tuple Relational Calculus Domain Relational Calculus

The document discusses the relational model and tuple relational calculus (TRC) and domain relational calculus (DRC) for querying relational databases. It provides examples of relations in a banking database and example queries written in TRC and DRC. The key aspects of TRC and DRC are presented, including how queries are written as sets of tuples that satisfy a predicate and the use of quantifiers and variables. The concept of safe expressions is also introduced.

Uploaded by

Himanshu Patel
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 22

7-Mar-12 1

Relational Model

Tuple Relational Calculus
Domain Relational Calculus


7-Mar-12 2
Banking Example
branch (branch-name, branch-city, assets)

customer (customer-name, customer-street, customer-only)

account (account-number, branch-name, balance)

loan (loan-number, branch-name, amount)

depositor (customer-name, account-number)

borrower (customer-name, loan-number)
7-Mar-12 3
The branch Relation
7-Mar-12 4
The customer Relation
7-Mar-12 5
The Account Relation
7-Mar-12 6
The loan Relation
7-Mar-12 7
The depositor Relation
7-Mar-12 8
The borrower Relation
7-Mar-12 9
Tuple Relational Calculus
A nonprocedural query language, where each query is of the form

{t | P (t) }
It is the set of all tuples t such that predicate P is true for t
t is a tuple variable, t[A] denotes the value of tuple t on attribute A
t e r denotes that tuple t is in relation r
P is a formula similar to that of the predicate calculus
7-Mar-12 10
Predicate Calculus Formula
1. Set of attributes and constants
2. Set of comparison operators: (e.g., <, s, =, =, >, >)
3. Set of connectives: and (.), or (v) not ()
4. Implication (): x y, if x if true, then y is true
x y x v y
5. Set of quantifiers:
- t e r (Q(t)) there exists a tuple in t in relation r
such that predicate Q(t) is true
t e r (Q(t)) Q is true for all tuples t in relation r
7-Mar-12 11
Banking Example
branch (branch-name, branch-city, assets)
customer (customer-name, customer-street, customer-city)
account (account-number, branch-name, balance)
loan (loan-number, branch-name, amount)
depositor (customer-name, account-number)
borrower (customer-name, loan-number)
7-Mar-12 12
Example Queries
Find the loan-number, branch-name, and amount for loans of
over $1200
{t | t e loan . t [amount] > 1200}

Find the loan number for each loan of an amount greater than
$1200
{t | - s e loan (t[loan-number] = s[loan-number]
. s [amount] > 1200}


Notice that a relation on schema [customer-name] is implicitly
defined by the query
7-Mar-12 13
Example Queries
Find the names of all customers having a loan, an account, or
both at the bank
{t | -s e borrower(t[customer-name] = s[customer-name])
v -u e depositor(t[customer-name] = u[customer-name])

Find the names of all customers who have a loan and an account
at the bank

{t | -s e borrower(t[customer-name] = s[customer-name])
. -u e depositor(t[customer-name] = u[customer-name])
7-Mar-12 14
Example Queries
Find the names of all customers having a loan at the Perryridge
branch
{t | -s e borrower(t[customer-name] = s[customer-name]
. -u e loan(u[branch-name] = Perryridge
. u[loan-number] = s[loan-number]))}

Find the names of all customers who have a loan at the
Perryridge branch, but no account at any branch of the bank
{t | -s e borrower(t[customer-name] = s[customer-name]
. -u e loan(u[branch-name] = Perryridge
. u[loan-number] = s[loan-number]))
. not -v e depositor (v[customer-name] =
t[customer-name]) }
7-Mar-12 15
Example Queries
Find the names of all customers having a loan from the
Perryridge branch, and the cities they live in

{t | -s e loan(s[branch-name] = Perryridge
. -u e borrower (u[loan-number] = s[loan-number]
. t [customer-name] = u[customer-name])
. - v e customer (u[customer-name] = v[customer-name]
. t[customer-city] = v[customer-city])))}
7-Mar-12 16
Example Queries
Find the names of all customers who have an account at all
branches located in Brooklyn:

{t | - c e customer (t[customer.name] = c[customer-name]) .
s e branch(s[branch-city] = Brooklyn
- u e account ( s[branch-name] = u[branch-name]
. - s e depositor ( t[customer-name] = s[customer-name]
. s[account-number] = u[account-number] )) )}

7-Mar-12 17
Safety of Expressions
It is possible to write tuple calculus expressions that generate
infinite relations.
For example, {t | t e r} results in an infinite relation if the
domain of any attribute of relation r is infinite
To guard against the problem, we restrict the set of allowable
expressions to safe expressions.
An expression {t | P(t)} in the tuple relational calculus is safe if
every component of t appears in one of the relations, tuples, or
constants that appear in P
7-Mar-12 18
Domain Relational Calculus
A nonprocedural query language equivalent in power to the tuple
relational calculus
Each query is an expression of the form:

{ < x
1
, x
2
, , x
n
> | P(x
1
, x
2
, , x
n
)}

x
1
, x
2
, , x
n
represent domain variables
P represents a formula similar to that of the predicate calculus

7-Mar-12 19
Example Queries
Find the branch-name, loan-number, and amount for loans of over
$1200

{< l, b, a > | < l, b, a > e loan . a > 1200}
Find the names of all customers who have a loan of over $1200

{< c > | - l, b, a (< c, l > e borrower . < l, b, a > e loan . a > 1200)}
Find the names of all customers who have a loan from the
Perryridge branch and the loan amount:

{< c, a > | - l (< c, l > e borrower . -b(< l, b, a > e loan .
b = Perryridge))}
or {< c, a > | - l (< c, l > e borrower . < l, Perryridge, a > e loan)}

7-Mar-12 20
Example Queries
Find the names of all customers having a loan, an account, or
both at the Perryridge branch:
{< c > | - l ({< c, l > e borrower
. - b,a(< l, b, a > e loan . b = Perryridge))
v - a(< c, a > e depositor
. - b,n(< a, b, n > e account . b = Perryridge))}

Find the names of all customers who have an account at all
branches located in Brooklyn:
{< c > | - n (< c, s, n > e customer) .
x,y,z(< x, y, z > e branch . y = Brooklyn)
- a,b(< x, y, z > e account . < c,a > e depositor)}
7-Mar-12 21
Safety of Expressions
{ < x
1
, x
2
, , x
n
> | P(x
1
, x
2
, , x
n
)}

is safe if all of the following hold:
1.All values that appear in tuples of the expression are values
from dom(P) (that is, the values appear either in P or in a tuple
of a relation mentioned in P).
2.For every there exists subformula of the form - x (P
1
(x)), the
subformula is true if an only if P
1
(x) is true for all values x from
dom(P
1
).
3. For every for all subformula of the form
x
(P
1
(x)), the
subformula is true if and only if P
1
(x) is true for all values x
from dom (P
1
).
7-Mar-12 22



Thank You

You might also like