" this can cause *huge* performance problems" True, but I believe that's why we usualy set up 2 databases one transactinal, where we stay put on to much normalization, relatinships, indexes etc., and query oriented databases where this performance may no matter that much since all the database updates are "nightly bach updaes" anyhow, everything else is only queries.
As far as "needing keys that are not synthetic" what I'm sayng is that many times I apply rules on a key value I also join on that key while if it was integer I'll have 2 different keys one to join and one to condition, multiply this by a couple and you get insted of a 100 lines query a 200 lines query, that's all i'm saying. Now probably this is just a silly asumption and I probably only need more experience on doing it that way to see if it 's actualy true or not.