Some ideas for implementation:
1) generate profession first, then race.
Each profession would have a "race profile" for the main racial groups. all skills would be profession-based, not race-based. The race profile would have full effect at C+ laws, but as laws become more liberal, the races in each profession equalize with the actual demographic numbers. e.g. at C+, all janitors are black (or maybe 80%), gradually evening out with all other races, and at C+ all lawyers are white, whereas that evens out to the actual population averages at L+.
This would be better than trying to generate profession from race, because new professions are added often, whereas new races probably won't be.
2) decouple specific ethnicities from main racial "groups" linked to professions.
- e.g. you first decided that the Yoga instructor is asian, then, the "asian" group is looked at to determine whether they're Chinese, Japanese, Korean etc (maybe based on real demographics), and a name is generate accordingly. This would allow the game to be easily modded to have a large number of ethnicities without having to have a table cross-referencing every race with every profession: each profession could have a profile which defines the races in terms of the main groups. I'd say likely candidates would be:
- white (english, french, german, italians)
- black
- asian (chinese, japanese, korean)
- amerindian
- jewish (why nobody mention them before)
- muslim (arabs, turks and persians)
I think what i've outlined here would be the simplest model, easily implemented and extendable.