Minako has a great post about the difference between 「べき」 and 「はず」: http://nihongodaybyday.blogspot.com/2011/09/blog-post.html
I’ve been meaning to write about this in a post sitting in my draft folder since early 2008. Oops. But now you can read about it and get some reading practice at the same time. Like she says, the only reason English speakers have a reason to confuse the two is because they happen to translate to the same word in English: “should”. But that word itself has many different meanings so it’s yet another example of why you should avoid translating to English as much as possible.
I would add that 「べき」 is a fairly formal phrase to use when making suggestions. So you normally wouldn’t use it to suggest eating more vegetables, for example. In a conversational setting, you should stick with 「～方がいい」. In English, it’s more formal to say “it’s better to…” as compared to “you should…” but it’s the exact opposite for Japanese.
A bit of uncertainty
I would also add that 「はず」 is not always used with absolute certainty. In English, people often say “supposed to” to try to avoid accountability and 「はず」 can be used the same way.
Ａ：Huh? No word from Tanaka-san?
Ｂ：That’s right. Even though (he/she) was supposed to contact (me) by yesterday.
I read Minako -san blog post but I got more confused on the usage of hazu ga nai. Her explanation on 「彼は来るはずがない」is, the speaker is certain 彼は来る won’t happen. But isn’t it just the same as 「彼は来ないはずです。」as the speaker is certain that 彼は来ない will happen? Would you mind enlightening me?
It’s the same difference as “He’s not supposed to come” vs “He’s supposed to not come.”