Chase (algorithm): Difference between revisions

Content deleted Content added
Tijfo098 (talk | contribs)
No edit summary
Tijfo098 (talk | contribs)
clarify
Line 1:
'''The Chase''' is a simple [[fixed point iteration|fixpoint algorithm]] testing and enforcing implication of data dependencies in [[database systems]]. It plays important roles in [[database theory]] as well as in practice.
It is used, directly or indirectly, on an everyday basis by people who design databases, and it is used in commercial systems to reason about the consistency and correctness of a data design.{{cn}} New applications of the chase in meta-data management and data exchange are still being discovered.
 
The Chase has its origins in two seminal papers, one by [[David Maier]], [[Alberto O. Mendelzon]], and [[Yehoshua Sagiv]]<ref>
Line 6:
[[Alfred V. Aho]], [[Catriel Beeri]], and [[Jeffrey D. Ullman]].<ref>[[Alfred V. Aho]], [[Catriel Beeri]], and [[Jeffrey D. Ullman]]: "The Theory of Joins in Relational Databases", ACM Trans. Datab. Syst. 4(3):297-314, 1979.</ref>
 
In its simplest application the chase is used for testing whether the [[projection (relational algebra)|projection]] of a [[relation schema]] constrained by some [[functional dependency|functional dependencies]] onto a given decomposition can be [[lossless-join decomposition|recovered by rejoining the projections]]. Let ''t'' be a tuple in <math>\pi_{S_1}(R) \bowtie \pi_{S_2}(R) \bowtie ... \bowtie \pi_{S_k}(R)</math> where ''R'' is a [[relation (database)|relation]] and ''F'' is a set of [[functional dependency|functional dependencies]] (FD). If tuples in ''R'' are represented as ''t<sub>1</sub>, ..., t<sub>k</sub>'', the join of the projections of each ''t<sub>i</sub>'' should agree with ''t'' on <math>\pi_{S_i}(R)</math> where ''i'' = 1, 2, ..., ''k''. If ''t<sub>i</sub>'' is not on <math>\pi_{S_i}(R)</math>, the value is unknown.
'''Chase test''' is for testing whether the [[projection (relational algebra)|projection]] of a relation onto any decomposition can be recovered by rejoining.
Let ''t'' be a tuple in <math>\pi_{S_1}(R) \bowtie \pi_{S_2}(R) \bowtie ... \bowtie \pi_{S_k}(R)</math> where ''R'' is a [[relation (database)|relation]] and ''F'' is a set of [[functional dependency|functional dependencies]] (FD). If tuples in ''R'' are represented as ''t<sub>1</sub>, ..., t<sub>k</sub>'', the join of the projections of each ''t<sub>i</sub>'' should agree with ''t'' on <math>\pi_{S_i}(R)</math> where ''i'' = 1, 2, ..., ''k''. If ''t<sub>i</sub>'' is not on <math>\pi_{S_i}(R)</math>, the value is unknown.
 
ChaseThe testchase can be done by drawing a tableau (which is the same formalism used in [[tableau query]]). Suppose ''R'' has [[attribute (computing)|attributes]] ''A, B, ...'' and components of ''t'' are ''a, b, ...''. For ''t<sub>i</sub>'' use the same letter as ''t'' in the components that are in S<sub>''i''</sub> but subscript the letter with ''i'' if the component is not in ''i''. Then, ''t<sub>i</sub>'' will agree with ''t'' if it is in S<sub>''i''</sub> and will have a unique value otherwise.
 
The chase process is [[confluence (rewriting system)|confluent]].