跳转到内容

域关系演算

维基百科,自由的百科全书

计算机科学中,域关系演算(DRC)是Michel LacroixAlain Pirotte关系数据模型发明的的作为声明性数据库查询语言[1]

在 DRC 中,“查询”有如下形式:

这里的 Xi 要么是一个域变量要么是一个常量,而 p(<X1, X2, ...., Xn>) 指示一个 DRC “公式”。 查询的结果为使得这个 DRC 为真的元组 Xi 到 Xn 的集合。

域关系演算可以使用量词,同时使用(以及蕴含算符); 尽管如此,域关系演算的表达能力同非递归的Datalog程序是一样的[2] ,也等价于关系代数[3]

例子

[编辑]

设 A, B, C 为 Rank, Name, ID 而 D, E, F 为 Name, DeptName, ID

找到星际飞船 USS Enterprise 的所有首领:

  • {<A, B, C> | <A, B, C> ∈ Enterprise ∧ A = "Captain" }

在这个例子中,A, B, C 同时指示结果集合和在表 Enterprise 中的一个集合。

找到在 Stellar Cartography 部门工作的 Enterprise 船员的名字:

  • {<B> | ∃ A, C ( <A, B, C> ∈ Enterprise ∧ ∃ D, E, F(<D, E, F> ∈ Departments ∧ F = C ∧ E = "Stellar Cartography" ))}

在这个例子中,我们只查找名字,所以 <B> 指示列名。F = C 是个要求,因为我们需要找到 Enterprise 船员并且他们在 Stellar Cartography 部门工作。

前面例子的另一个可替代表示为:

  • {<B> | ∃ A, C (<A, B, C> ∈ Enterprise ∧ ∃ D (<D, "Stellar Cartography", C> ∈ Departments))}

在这个例子中,要求的 F 域的值被直接的放置在公式中,而 C 域变量重新用于部门存在性的查询中,因为它已经持有了一个船员的 id。

参考资料

[编辑]
  1. ^ Michel Lacroix, Alain Pirotte: Domain-Oriented Relational Languages. VLDB 1977: 370-378
  2. ^ Carlo Zaniolo. Advanced Database Systems. Morgan Kaufmann Publishers. 1997: 169. ISBN 1-55860-443-X. 
  3. ^ E. F. Codd: Relational Completeness of Data Base Sub-languages. In R. Rustin, editor, Data Base Systems. Prentice Hall, 1972