Download presentation
Presentation is loading. Please wait.
Published bySkyler Ravens Modified over 9 years ago
1
Dr. Alexandra I. Cristea http://www.dcs.warwick.ac.uk/~acristea/ CS 319: Theory of Databases: C6
2
2 … previous RA
3
3 Content 1.Generalities DB 2.Integrity constraints (FD revisited) 3.Relational Algebra (revisited) 4.Query optimisation 5.Tuple calculus 6.Domain calculus 7.Query equivalence 8.Temporal Data 9.No Nulls 10.The Askew Wall
4
4 Tuple Calculus non-procedural query language A query in TC is expressed as: {t|P(t)} where: t – set of tuples (also called free or range variable) P – predicate that is true for t (also called formula) Also: t[A] – value of tuple t on attribute A t r – means the tuple t is in relation r
5
5 Example TC language QUEL (used by INGRES DBMS) SQL (to some extent)
6
6 Examples TC 1.{t | t loan ^ t[amount] > 1200} 2.{t | s loan (t[loan-number] = s[loan-number] ^ s[amount] > 1200)}
7
7 Satefy of expressions: Tuple Calculus (& DC) A TC expression {t | P(t)} may give an infinite relation, e.g., { t | (t loan) } Define dom(P) as the set of all values referenced by P (e.g. literals or relations) A TC expression {t | P(t)} is safe when all values appearing in the result are values from dom(P).
8
8 Queries in TC & DC Translate the following questions (for the bank database) to the tuple & domain calculus: 1.Give the name of customers that have a loan with a branch where they also have an account. 2.Give the name of customers who have a loan at a branch where they do not have an account. 3.Give the name of customers who have a loan at every branch where they have an account. 4.Give the name of customers who have loans only at branches where they have an account.
9
9 1. Give the name of customers that have a loan with a branch where they also have an account. TC: {t| b borrower(t[c_n]=b[c_n] ^ l loan(l[l_n]=b[l_n] ^ a account(a[b_n]=l[b_n] ^ d depositor(a[a_n]=d[a_n] ^ d[c_n]=b[c_n] ))))}
10
10 2. Give the name of customers who have a loan at a branch where they do not have an account. TC: {t| b borrower(t[c_n]=b[c_n] ^ l loan(l[l_n]=b[l_n] ^ a account(a[b_n]=l[b_n] ^ d depositor(a[a_n]=d[a_n] ^ d[c_n]=b[c_n] ))))}
11
11 3. Give the name of customers who have a loan at every branch where they have an account. TC: {t| d depositor(t[c_n]=d[c_n] ^ d2 depositor((d2[c_n]=d[c_n] ^ a account(a[a_n]=d2[a_n])) => ( l loan(l[b_n]=a[b_n] ^ b borrow(b[l_n]=l[l_n] ^ b[c_n]=d2[c_n])))))} This is necessary for the safety of the expression, to reduce the search space
12
12 4. Give the name of customers who have loans only at branches where they have an account. TC: {t| d borrow(t[c_n]=d[c_n] ^ d2 borrow((d2[c_n]=d[c_n] ^ a loan(a[l_n]=d2[l_n]) => ( l account(l[b_n]=a[b_n] ^ b depositor(b[a_n]=l[a_n] ^ b[c_n]=d2[c_n]))))))}
13
13 4. Give the name of customers who have loans only at branches where they have an account. TC: {t| b borrow(t[c_n]=b[c_n] ^ b2 borrow((b2[c_n]=b[c_n] ^ l loan(l[l_n]=b2[l_n])) => ( a account(a[b_n]=l[b_n] ^ d depositor(d[a_n]=a[a_n] ^ d[c_n]=n2[c_n])))))} With more intuitive attrs naming.
14
14 Library TC/DC questions 1.Give the name and department of borrowers, and the ISBN-number of the books of which they were the first borrower. 2.Give the name and department of borrowers who have never borrowed the most recently purchased copy of a book. 3.Give the title of books that are “present” in the library, reserved by someone, but not yet borrowed (by anyone).
15
15 1. Give the name and department of borrowers, and the ISBN-number of the books of which they were the first borrower. TC: {t | b borrow( t[name]=b[name] ^ t[department]=b[department] ^ c copy(b[barcode]=c[barcode] ^ t[ISBN]=c[ISBN] ^ c2 copy(c2[ISBN]=c[ISBN] ^ b2 borrow(b2[barcode]=c2[barcode] ^ b2[from]<b[from])))) }
16
16 2. Give the name and department of borrowers who have never borrowed the most recently purchased copy of a book. TC {t | b borrow( t[name]=b[name] ^ t[department]=b[department] ^ b2 borrow((b2[name]=b[name] ^ b2[department]=b[department] ^ c2 copy (c2[barcode]=b2[barcode])) => ( c3 copy(c3[ISBN]=c2[ISBN] ^ c3[cpYear]>c2[cpYear] ^ b2[from] c3[cpYear])))}
17
17 3. Give the title of books that are “present” in the library, reserved by someone, but not yet borrowed (by anyone). TC: {t| b book(t[title]=b[title] ^ r reservation(r[ISBN]=b[ISBN] ^ c copy(c[ISBN]=b[ISBN] ^ c[present] = “true” ^ c2 copy(c2[ISBN]=c[ISBN] ^ b borrow(b[barcode]=c2[barcode])))))}
18
18 Beer Database visits(drinker, bar) serves(bar, beer) likes(drinker, beer).
19
19 Beer questions with a difference 1.Give all drinkers that visit bars that don’t serve any beer they like 2.Give all drinkers that only visit bars that serve a beer they like 3.Give all drinkers that only visit bars that serve no beer they like 4.Give all drinkers that only visit bars that serve all beers they like (and maybe other beers as well) 5.Give all drinkers that only visit bars that only serve beers they like (and thus serve nothing else)
20
20 Content 1.Generalities DB 2.Integrity constraints (FD revisited) 3.Relational Algebra (revisited) 4.Query optimisation 5.Tuple calculus 6.Domain calculus 7.Query equivalence 8.Temporal Data 9.No Nulls 10.The Askew Wall
21
21 Domain calculus Uses domain variables to take values from an attributes domain, instead of tuple values is related to QBE language An expression in DC is of the form: { | P(x1,x2,…,xn)} where: x1,…xn are domain variables P is a formula
22
22 Example DC language QBE Others: ILL, FQL, DEDUCE
23
23 Example DC 1.{ | loan ^ a > 1200} 2.{ | b,a ( loan ^ a > 1200)}
24
24 Queries in TC & DC Translate the following questions (for the bank database) to the tuple & domain calculus: 1.Give the name of customers that have a loan with a branch where they also have an account. 2.Give the name of customers who have a loan at a branch where they do not have an account. 3.Give the name of customers who have a loan at every branch where they have an account. 4.Give the name of customers who have loans only at branches where they have an account.
25
25 1. Give the name of customers that have a loan with a branch where they also have an account. TC: {t| b borrower(t[c_n]=b[c_n] ^ l loan(l[l_n]=b[l_n] ^ a account(a[b_n]=l[b_n] ^ d depositor(a[a_n]=d[a_n] ^ d[c_n]=b[c_n] ))))} DC: { | ln ( borrower ^ bn,a( loan ^ an,b( account ^ depositor)))}
26
26 2. Give the name of customers who have a loan at a branch where they do not have an account. TC: {t| b borrower(t[c_n]=b[c_n] ^ l loan(l[l_n]=b[l_n] ^ a account(a[b_n]=l[b_n] ^ d depositor(a[a_n]=d[a_n] ^ d[c_n]=b[c_n] ))))} DC: { | ln ( borrower ^ bn,a( loan ^ an,b( account ^ depositor)))}
27
27 3. Give the name of customers who have a loan at every branch where they have an account. TC: {t| d depositor(t[c_n]=d[c_n] ^ d2 depositor((d2[c_n]=d[c_n] ^ a account(a[a_n]=d2[a_n]) => ( l loan(l[b_n]=a[b_n] ^ b borrow(b[l_n]=l[l_n] ^ b[c_n]=d2[c_n]))))))} DC: { | an( depositor ^ an2 (( depositor ^ bn,b( account) => ( ln,a( loan ^ borrow)))))} This is necessary for the safety of the expression, to reduce the search space
28
28 4. Give the name of customers who have loans only at branches where they have an account. TC: {t| d borrow(t[c_n]=d[c_n] ^ d2 borrow((d2[c_n]=d[c_n] ^ a loan(a[l_n]=d2[l_n]) => ( l account(l[b_n]=a[b_n] ^ b depositor(b[a_n]=l[a_n] ^ b[c_n]=d2[c_n]))))))} DC: { | an( borrow ^ an2 (( borrow ^ bn,b( loan) => ( ln,a( account ^ depositor)))))}
29
29 4. Give the name of customers who have loans only at branches where they have an account. TC: {t| b borrow(t[c_n]=b[c_n] ^ b2 borrow((b2[c_n]=b[c_n] ^ l loan(l[l_n]=b2[l_n]) => ( a account(a[b_n]=l[b_n] ^ d depositor(d[a_n]=a[a_n] ^ d[c_n]=n2[c_n]))))))} DC: { | ln( borrow ^ ln2 (( borrow ^ bn,a( loan) => ( an,b( account ^ depositor)))))} With more intuitive attrs naming.
30
30 Library TC/DC questions 1.Give the name and department of borrowers, and the ISBN-number of the books of which they were the first borrower. 2.Give the name and department of borrowers who have never borrowed the most recently purchased copy of a book. 3.Give the title of books that are “present” in the library, reserved by someone, but not yet borrowed (by anyone).
31
31 1. Give the name and department of borrowers, and the ISBN-number of the books of which they were the first borrower. TC: {t | b borrow( t[name]=b[name] ^ t[department]=b[department] ^ c copy(b[barcode]=c[barcode] ^ t[ISBN]=c[ISBN] ^ c2 copy(c2[ISBN]=c[ISBN] ^ b2 borrow(b2[barcode]=c2[barcode] ^ b2[from]<b[from])))) } DC: { | b,f,t( borrow ^ Y,p,d1( copy ^ b2,d2,Y2,p2( copy ^ n2,f2,t2,d3( borrow ^ f2<f)))) }
32
32 2. Give the name and department of borrowers who have never borrowed the most recently purchased copy of a book. TC {t | b borrow( t[name]=b[name] ^ t[department]=b[department] ^ b2 borrow((b2[name]=b[name] ^ b2[department]=b[department] ^ c2 copy (c2[barcode]=b2[barcode])) => ( c3 copy(c3[ISBN]=c2[ISBN] ^ c3[cpYear]>c2[cpYear] ^ b2[from] c3[cpYear])))} DC { | b,f,t ( borrow ^ b2,f2,t2(( borrow ^ ISBN,d2,Y2,p2( copy]) => ( b3,d3,Y3,p3( copy ^ Y3>Y2 ^ f2 Y3)))))}
33
33 3. Give the title of books that are “present” in the library, reserved by someone, but not yet borrowed (by anyone). TC: {t| b book(t[title]=b[title] ^ r reservation(r[ISBN]=b[ISBN] ^ c copy(c[ISBN]=b[ISBN] ^ c[present] = “true” ^ c2 copy(c2[ISBN]=c[ISBN] ^ b borrow(b[barcode]=c2[barcode])))))} DC: { | ISBN,p,y( book ^ n,d,date,c( reservation ^ b2,d2,Y2,p2( copy ^ p2 = “true” ^ b3,d3,Y3,p3( copy ^ n4,d4,f4,t4( borrow)))))}
34
34 Summary We have learned TC & DC We have learned to perform simple and more complex queries in TC & DC
35
35 … to follow Query equivalence
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.