Проблема то в том, что пополнения счета и вывод придется хранить в разных таблицах - там много отличающихся параметров. Промокоды то же самое, да и они могут не иметь никакого отношения к финансам.
Т.е. придется хранить user_id и profession_id в 4 таблице и делать FOREIGN KEY (user_id, profession_id) REFERENCE user_profession(user_id, profession_id)?