In computer science, domain relational calculus (DRC) is a calculus that was introduced by Michel Lacroix and Alain Pirotte as a declarative database query language for the relational data model.
In DRC, queries have the form:
:<math> \{\langle X_1, X_2, ...., X_n \rangle \mid p(\langle X_1, X_2, ...., X_n\rangle) \} </math>
where each X<sub>i</sub> is either a domain variable or constant, and <math>p(\langle X_1, X_2, ...., X_n \rangle)</math> denotes a DRC formula. The result of the query is the set of tuples X<sub>1</sub> to X<sub>n</sub> that make the DRC formula true.
This language uses the same operators as tuple calculus,
the logical connectives ∧ (and), ∨ (or) and ¬ (not). The existential quantifier (∃) and the universal quantifier (∀) can be used to bind the variables.
Its computational expressiveness is equivalent to that of relational algebra.
Examples
Let (A, B, C) mean (Rank, Name, ID) in the Enterprise relation
and let (D, E, F) mean (Name, DeptName, ID) in the Department relation
All captains of the starship USS Enterprise:
<math display="block">\left\{ \ {\left\langle A, B, C \right\rangle} \mid {\left\langle A, B, C \right\rangle \in \mathrm{Enterprise} \ \land \ A = \mathrm{'Captain'} } \ \right\}</math>
In this example, A, B, C denotes both the result set and a set in the table Enterprise.
Names of Enterprise crew members who are in Stellar Cartography:
<math display="block">\begin{align}
\{ {\left\langle B \right\rangle}
& \mid {\exists A, C \ \left\langle A, B, C \right\rangle \in \mathrm{Enterprise} } \\
& \land \ {\exists D, E, F \ \left\langle D, E, F \right\rangle \in \mathrm{Departments} } \\
& \land \ F = C \\
& \land \ E = \mathrm{'Stellar\ Cartography'} \} \\
\end{align}</math>
In this example, we're only looking for the name, and that's B. The condition F = C is a requirement that describes the intersection of Enterprise crew members AND members of the Stellar Cartography Department.
An alternate representation of the previous example would be:
<math display="block">\begin{align}
\{ {\left\langle B \right\rangle}
& \mid {\exists A, C \ \left\langle A, B, C \right\rangle \in \mathrm{Enterprise} } \\
& \land \ {\exists D \ \left\langle D, \mathrm{'Stellar\ Cartography'}, C \right\rangle \in \mathrm{Departments} } \} \\
\end{align}</math>
In this example, the value of the requested F domain is directly placed in the formula and the C domain variable is re-used in the query for the existence of a department, since it already holds a crew member's ID.
Both of them written in SQL will be like:<syntaxhighlight lang="sql">
SELECT B
FROM Enterprise
JOIN Department
ON F = C
AND E = 'Stellar Cartography';
</syntaxhighlight>
See also
- Relational calculus
References
External links
- DES – An educational tool for working with Domain Relational Calculus and other formal languages
- WinRDBI – An educational tool for working with Domain Relational Calculus and other formal languages
