F={A → B; B → C; C → D}

R is decomposed in R¹(A,B) & R²(A,D) & R³(C, D)

Is it without loss of information?

I would have said yes as far as with the following array

The array

A → B x²²= b

B → C x¹³=x²³=c

Therfore we should see that it is without loss of information (we should have a straight line of determinated data). However, the answer says that it clearly lacks informations and in order to show that it is with loss of information, one should find an instance r such that

r ≠ r¹⋈ r²⋈ r³

I know that I have then to do some arrays and some junctions but I don't even know how to start the arrays...

1 Answer 1


The trick to solve this exercise it to repeat as much as possible the elements of the table. Since A is the key, you cannot repeat A, but you can, for instance, repeat two times B and C and three times D. Here is a very simple and short example (note that the functional dependencies are respected):

r =
| A | B | C | D |
|a1 |b1 |c1 |d1 |
|a2 |b1 |c1 |d1 |
|a3 |b2 |c2 |d1 |

And since this is an exercise, I will leave to you the task of projecting r over R1, R2 and R3, and discovering how the natural join of the three relations differs from the original relation r.

Finally a terminological note: a relation instance is not an array! There is no order in the rows or the columns of a relation, while in an array the order is essential.

  • Why is A the key? I tought that I was able to repeat two times B, three times B because B → C and D three times I agree from R¹(A,B) thanks to B → C; C → D. How can I project r over R1 ̀ and R2`? I know it is required to show that it is without loss of information through the natural join but how do we do that? Commented Apr 22, 2016 at 12:44
  • 1
    A+ = ABCD, so A is the key. Do you know how to project a relation over a set of attributes? You should project r over the attributes AB (those of R1), over BC (those of R2) and over CD (those of R3). Remember that the projection gets a subset of attributes from the tuples and eliminates duplicate tuples. When you have the three relations then you can do the natural join over them (first join on r1 and r2, then join the result with r3). A natural join is a way of combining tuples by combining all the attributes of them, when they have the same value for the attributes with the same name.
    – Renzo
    Commented Apr 22, 2016 at 12:56
  • If you don't know what does it mean to do a projection or a natural join, you cannot do this exercise...
    – Renzo
    Commented Apr 22, 2016 at 12:56
  • I do, I do, I'm such a beginer... I will update my question to show my projections and let you know! Commented Apr 22, 2016 at 14:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.