📜  DBMS 中的元组关系演算 (TRC)

📅  最后修改于: 2021-09-27 14:53:57             🧑  作者: Mango

与关系代数不同,元组关系演算是一种非过程查询语言。元组演算只提供查询的描述,但不提供解决它的方法。因此,它解释了要做什么,而不是如何做。
在元组演算中,查询表示为

{t| P(t)}

其中 t = 结果元组,
P(t) = 称为谓词,这些是用于获取 t 的条件

因此,它生成所有元组 t 的集合,使得谓词 P(t) 对 t 为真。

P(t) 可以具有与 OR (∨)、AND (∧)、NOT(¬) 逻辑组合的各种条件。
它还使用量词:
∃ t ∈ r (Q(t)) = 在关系 r 中的 t 中存在一个元组,使得谓词 Q(t) 为真。
∀ t ∈ r (Q(t)) = Q(t) 对关系 r 中的所有元组都为真。

例子:

表 1:客户

Customer name Street City
Saurabh A7 Patiala
Mehak B6 Jalandhar
Sumiti D9 Ludhiana
Ria A5 Patiala

表 2:分支

Branch name Branch city
ABC Patiala
DEF Ludhiana
GHI Jalandhar

表 3:帐户

Account number Branch name Balance
1111 ABC 50000
1112 DEF 10000
1113 GHI 9000
1114 ABC 7000

表 4:贷款

Loan number Branch name Amount
L33 ABC 10000
L35 DEF 15000
L49 GHI 9000
L98 DEF 65000

表 5:借款人

Customer name Loan number
Saurabh L33
Mehak L49
Ria L98

表 6:存款人

Customer name Account number
Saurabh 1111
Mehak 1113
Sumiti 1114

Queries-1:查找贷款编号、分行、贷款金额大于等于10000的金额。

{t| t ∈ loan  ∧ t[amount]>=10000}

结果关系:

Loan number Branch name Amount
L33 ABC 10000
L35 DEF 15000
L98 DEF 65000

在上面的查询中,t[amount] 被称为 tupple 变量。

查询 2:查找金额大于或等于 10000 的每笔贷款的贷款编号。

{t| ∃ s ∈ loan(t[loan number] = s[loan number]  
                   ∧ s[amount]>=10000)}

结果关系:

Loan number
L33
L35
L98

查询 3:查找在银行拥有贷款和帐户的所有客户的姓名。

{t | ∃ s ∈ borrower( t[customer-name] = s[customer-name])   
     ∧  ∃ u ∈ depositor( t[customer-name] = u[customer-name])}

结果关系:

Customer name
Saurabh
Mehak

查询 4:查找在“ABC”分行有贷款的所有客户的姓名。

{t | ∃ s ∈ borrower(t[customer-name] = s[customer-name]  
   ∧ ∃ u ∈  loan(u[branch-name] = “ABC” ∧ u[loan-number] = s[loan-number]))}

结果关系:

Customer name
Saurabh