Minimal 3NF normalization issues
A. Canonical Cover

The example is almost a canonical cover, since in a canonical cover each dependency has only an attribute on the right part, so the dependency 

C → DF 


must be replaced by the two dependencies:

C → D
C → F


B. Second step of the 3NF Synthesis Algorithm

The step says to divide the functional dependencies in groups with the same left part, and create a relation scheme with all the attributes of each group, not to create a relation for each functional dependency. In this case the effect is the same as your solution.

So the second step produces the following schemas:

R1 &lt;(A H), { A → H }&gt;    
R2 &lt;(A B D), { A D → B }&gt;    
R3 &lt;(A B F), { A B → F }&gt;    
R4 &lt;(B E), { B → E }&gt;    
R5 &lt;(C D F), { C → D, C → F }&gt;    
R6 &lt;(D E), { E → D }&gt;    
R7 &lt;(C F H), { F H → C }&gt;


Note that in this the decomposition the dependencies shown are only the original dependencies used to produce the decomposition, since in the algorithm the projection of the dependencies is not calculated, and this is due to the fact that this computation requires an exponential algorithm.

If, however, we look at the projection of the dependencies, here you are correct, since both A → D and F → B are not present in the projection. Here is the above decomposition together with a projection of the original dependencies over the subschema:

R1 &lt;(A H), { A → H }&gt;    
R2 &lt;(A B D), { A D → B, B → D }&gt;    
R3 &lt;(A B F), { A B → F, A F → B }&gt;    
R4 &lt;(B E), { B → E }&gt;    
R5 &lt;(C D F), { C → D, C → F }&gt;    
R6 &lt;(D E), { E → D }&gt;    
R7 &lt;(C F H), { F H → C, C → F }&gt;


C. Third step of the 3NF Synthesis Algorithm

Correct

D. Fourth step of the 3NF Synthesis Algorithm

Here again the step is incorrect. The fourth step simply says: “if no schema exists with a key of the original relation, than add a new schema with this key”. See for instance Algorithm 16.6, R.Elmasri, S.B. Navathe, Foundamentals of Database Systems, 6th Edition, pag. 561 (or any other good book on databases):


  If none of the relation schemas in D contains a key of R, then create one more relation schema in D that contains attributes that form a key of R.


And since in this case there exist relations with a key, no other relation must be added, and the final decomposition is not modified:

R1 &lt;(A H)&gt;    
R2 &lt;(A B D)&gt;    
R3 &lt;(A B F)&gt;    
R4 &lt;(B E)&gt;    
R5 &lt;(C D F)&gt;    
R6 &lt;(D E)&gt;    
R7 &lt;(C F H)&gt;


So the solution given, with R1', R2' and R3' is not correct and it is not in Third Normal Form. It is easy to show this. Taking for instance the second relation,

R2' (A B C F H)


and projecting the original dependencies over it, we found the following dependencies:

{ A F → B
  A B → C
  A → H
  C → F
  F H → C }


with keys:

{ (A B) (A C) (A F) }


So we can see that the dependency A → H violates the Third Normal Form (A is not a (super)key and H is not a prime attribute).



As shown in the answer, if the relations must still be in 3NF, the final solution with three schemas is not the minimal 3NF normalization, since the relation R2' is not in 3NF. In other words, the solution is incorrect.

The classical synthesis algorithm produces the decomposition in 7 relations. I am not aware of any published algorithm that will minimize the number of relations obtained by that algorithm. You could try to combine relations and check if the combination is still in 3NF, but note that checking if a relation is in 3NF is an exponential task, since one should find all the keys, to exclude the possibility that a determinate be a prime attribute.