Ranking System with Different Categories
Track the facts that drive your ranking system in normalized tables according to what makes sense for those facts without regard to how it drives your ranking system.

Then have a separate table or tables that converts your basic facts into a points system that allows you to do simple sorts for ranking.

The reason to keep these things separate is that your basic facts are driven by some kind of usage of your system, whatever that may be.  You want the code for tracking this usage to be clean and maintainable.  Even if you didn't have a ranking system, these facts would exist.  The logic to maintain these facts is independent of the logic to calculate rankings.  The ranking rules are an extra layer on top of the facts.  Also, your rules for ranking could (easily) change over time, so you don't want to tangle up your basic facts with less stable rules.