如何使用关系演算定义(1,6)基数

时间:2016-09-28 04:25:42

标签: relational-database tuple-relational-calculus

我有这三个表:

 Customer
 Rent
 Book

Customer和Rent表之间的基数是(1,6),Rent和Book表之间的基数是(1,无穷大)。

使用关系演算的语法,我会定义一个(0,1)基数,如下所示:

∀x∀y∀z(rent(x,y)∧rent(x,z) → y =z)

但我怎样才能定义(1,6)基数?

1 个答案:

答案 0 :(得分:0)

你可以用这种方式表达它(在谓词演算中,正如你已经表达了你的问题):

∀ x (x ∈ Customers →  ∃ y rent(x,y))

∧

∀ x (x ∈ Customers → cardinality ({ y | rent(x,y)}) ≤ 6)

如果您愿意,可以使用以下形式的复杂逻辑表达式编写条件cardinality(set) ≤ n

∀y1∀y2 ... ∀yn (rent(x,y1) ∧ rent(x,y2) ∧ ... ∧ rent(x,yn)
                  ∧ y1 ≠ y2 ^ ... (all the possible pairs) ... 
  → ∄ ys (rent(x,ys)  ∧ ys ≠ y1 ^ ys ≠ y2 ^ ... ^ ys ≠ yn)

或以更简洁的方式(参见@philipxy的注释):

∀y0∀y1 ... ∀yn (rent(x,y0) ∧ rent(x,y1) ∧ ... ∧ rent(x,yn) → y0 = y1 ∨ ...