Обычно это обрабатывается с помощью таблицы ссылок для отношения многие ко многим:
PlayerClass:
PlayerID
ClassID
Обычно с PlayerID, ClassID является первичным ключом, а PlayerID и ClassID являются ссылками внешнего ключа на ваши таблицы Class и Player.
Как правило, это будет проиндексировано и другим способом (ClassID, PlayerID) во многих проектах (хотя, возможно, не в вашем).
Ваша таблица навыков будет аналогично привязана к классу:
ClassSkills:
ClassID
SkillID
Теперь вот где это становится сложным - что произойдет, если игрок находится в двух классах, каждый из которых дает один и тот же навык? Являются ли они аддитивными или объединены или как? Это проблема проблемной области, которую необходимо решить, прежде чем вы сможете просто объединить все эти столы и посмотреть, какими навыками обладает игрок.