No, that design is exactly what I was thinking of, which is the way I would design it with purely relational design as a consideration (except I would have added PRIMARY KEY (`player_id`,`skillid`)
). So, my question, because I am trying to learn concepts of database/software design, is why was it changed to the current schema?
As far as query speed because of so many skill rows per player is concerned, I routinely run queries joining 800,000 and 1,000,000 row tables with MySQL, and, while not fast enough for game, it has no problem handling data in that volume (as long as I make sure I am using fields that are properly indexed. It crashes and burns when I run a query that is not properly indexed, but that is a fault of the index design). This is on a computer that is not a dedicated server, so MySQL is set up as a development install so that it doesn't use as much memory. I can't imagine that the few tens of thousand rows that would be sufficient for the largest server I could imagine, would be a breeze for MySQL. Of course, maybe I am underestimating the popularity of any single OTS, but at that point, I would think they would have a dedicated MySQL server.