Applications can use validate in production, but typically that should be a setting you use in your quality/test environment to verify that the database scripts you've written or applied to your database migration tool are accurate. Another reason not to use validate in production is that it could be a bottleneck during the startup process of your application, particularly if your object model is quite extensive in size or if other network related factors come into play.