It sounds like what you want to do is reporting, otherwise known as Online Analytical Processing (OLAP). Reporting queries tend to touch a ton of data, making the optomizations for them completely different from your standard database. Data tends to be massively denormalized. This makes it important that you keep your transactional data seperate from your reporting data. If you try to do reporting on the same data that is used for letting teachers enter grades, students view small sets of grades, etc, the database operations will drag because it has been suboptimally designed for either OLAP or OLTP.
A standard way to do this is to have one database used to store the denormalized data, which is used by your website/transactional systems. You then build a data warehouse using one of the OLAP tools, and use an ETL Process at some regular interval (like once a day) to load new transactional data into the reporting database.
...
Now, this is all assuming that this is a fiarly large project, that you have significant time on your hands, and that you want to get really deep into data warehouse concepts like star schemas and the like.