I prefer to limit on a per option basis, not on a per book basis. When I'm running a campaign, I will usually define some material as "core", which players can select from without restriction. Beyond that, players can select one non-core option (race, class, prestige class or substitution levels, feat, spell, magic item, etc.) per level. 1st-level characters can have an "advance" of up to three non-core options (if he wants to start with a non-core race, class and non-core feat, for example). There are a small number of options that I don't allow, mainly because I don't like the way they affect game play (e.g. the frenzied berserker).
I find that this gives players a great deal of flexibility and the ability to select from multiple sources without making things too complicated.
EDIT: One more thing. I usually ask the players to give me their non-core options in advance, so that I can look through them and familiarize myself with them (or say no) before play. I'm generally quite up to date with WotC material, but it's still a good idea to review the specific elements that the players are likely to bring into play beforehand.