Luiz, see my comments below with >>...
1) I have a table to save the database version.
R: How can I get the version? Is it a DDT version?>> No it is not. I is just a varchar field which represents any version you want to use, then you convert that value to a Version type to be compared with the constant. The version in the DDT pkg is not being used or implemented, we don't have access to it and it looks like the SF team will not change this because they would have to uncompress the pkg file to read the version and it is not worthy.
4) When opening the application, it will compare the constant value with the one in the version table and they don't match, I will check if there are not users logged in LoggedUsers, then will call the migrator class to update the database.
R: This is a problem to me! I have to guarantee that my system only will open if the database is ok!
Other thing is: Many users access the database remotely, and it´s so slow.....
If I could upgrade DDT version in some pieces only when necessary... pretty cool!>> I understand your point, but I am not aware of you being able to update specific objects using the DDT. If this is an In-House application in which you have control of the database, you could do a Windows Service to apply the updates late at night after checking that nobody is using the database, also if you have many remote users, you could take advantage of the SF Enterprise Server, I have not used it but I am heard just good things about it from developers using it. My logic will not let anybody work on the program unless the database have been updated.