I think this question was pretty much covered in this post.
I just summarize it here:
Nemhauser and Wolsey have an excellent book on mathematical programming you can start with that and if you are interested in the theory of mathematical programming you can go on to read Bertsimas and Tsitsiklis's book "Introduction to Mathematical Programming". Although it is named "Introduction to ..." Bertsimas's book is not an introductory book in any means. If you really like to torture yourself with the theory of polytopes I highly suggest Alexander Schrijver's book "Theory of Linear and Integer Programming". it is an amazing book but there is no examples :)
For nonlinear programming nothing beats Bazaraa's book "Nonlinear Programming: Theory and Algorithms" in terms of theory. Also "Linear and Nonlinear Programming" by Ye and Luenberger is a great reference for applications.
One easy way to get exposed to modeling questions is to get the AMPL book and download their educational software (free) and work through the examples. You will see a lot of different situations and how to model different systems.