Trying to follow the chase algorithm as I understand it,
- If two rows agree in the left side of a functional dependency (FD for brevity), make their right sides agree too.
- Always replace a subscripted symbol by the corresponding unsubscripted one, if possible.
- If we ever get an unsubscripted row, we know any tuple in the project-join is in the original (the join is lossless).
- Otherwise, the final tableau is a counter example
So I tried to perform the chase algorithm on an example schema. Given R (A, B, C, D, E)
decomposed into relations {A, B, C}
, {B, C, D}
, {A, C, E}
and FDs, A → D
, CD → E
and E → D
Beginning the chase test
+-----+-----+---+-----+-----+
| a | b | c | d | e |
+-----+-----+---+-----+-----+
| a | b | c | d_1 | e_1 |
+-----+-----+---+-----+-----+
| a_2 | b | c | d | e_2 |
+-----+-----+---+-----+-----+
| a | b_3 | c | d_3 | e |
+-----+-----+---+-----+-----+
And ending
+-----+-----+---+-----+-----+
| a | b | c | d | e |
+-----+-----+---+-----+-----+
| a | b | c | d_1 | e |
+-----+-----+---+-----+-----+
| a_2 | b | c | d | e_2 |
+-----+-----+---+-----+-----+
| a | b_3 | c | d_1 | e |
+-----+-----+---+-----+-----+
So the final tableau is a counter example and this isn't lossless.