I've created an SQL database design, and I need to make sure if it's properly normalized and efficient. I'm attaching a flow chart, so let me know if it looks good.
Question 1)
I'm creating software to manage a debate tournament. Every time a student participates in an event, her participation is recorded in the "student round log" table (see diagram below). This just has one primary and a few foreign keys, which link to general information about students, what the tournament was like, what happened in the particular debate event, and what kind of school she goes to. I'll then take these tables and generate all the information you can imagine--like creating wins/losses statistics, brackets, etc. Is this an efficient way to arrange my database?
Question 2)
Okay, say for 3 years the program manages 10 tournaments a week, each with 200 students, who each participate in an average of 10 events. That's about 3,000,000 entries in the big "student round info" table at the bottom. It seems wasteful to constantly be searching through records that are a few years old, that you only need occasionally. Should I optimize somehow? If so, would it make the code more cumbersome? What factors should I consider?