No veo sentido a tener un ID como float, a menos que vayas en avanzes de menos de 1 unidad.
1.01, 1.02, etc.
Si no, pues lo natural será un tipo entero.
Sobre el Short y el SmallInt, los nombres dan la sensación que son equivalentes: enteros de 16 bits.
Hasta luego.
