So I'm trying to design a rather large database to handle videos and their tags. Because only a finite number of tags can be selected for a video (27) I am storing them in a table 28 columns wide (one column for each tag + the video_id).
My problem arises when I want to get the number of times a user has liked/disliked a video with a certain tag (lets say #24). Each Like/Dislike gets a row in another table.
Here are the two options I've considered.
1) Add 27 more tinyint columns to the User Table, each one representing the number of times he's voted on a video with tagX.
PRO: Easily Selected
CON: Doubles the amount of data needed for each user
2) Use Inner Joins
PRO: Keeps size small
CON: Harder on the system
Both because I'm optomistic and because I'm trying to use good practice, I'm trying to optimize my databases for 300,000+ users, and these numbers will be needed a lot. I Did the math and even with 300,000 users it would only add about 27 megabytes to my database.
What to do!?