I am creating a module for a school. Now a school has a lot of data like: school general info, grades, classes, rates, registration dates, etc.
Now, there are some information that should remain more or less the same, regardless of the year, e.g. School Name, School address, Levels (as this is government regulated), etc.
However, there are those data that is year-dependent. E.g. Classes (new classes may be added next year?), registration dates, school holidays, school rates, etc. may be different from year to year.
And these aren't just standalone data for display. The system logic relies on some of them too. E.g. school rates determine the invoices to be generated for the parents. Hence, they can't just be changed on a whim, once set.
How do I handle these types of settings? When I create a 'new school', should my first question be for what school year are the settings going to be (e.g. Aug 2017 to Jun 2018)? And after that duration has ended (e.g. Jul 1 2018), I would be prompted to enter a 'new school year' followed by asking the user to go through all the settings again (prefilled with last year's info).
A school can be a parent object to a 'year'.
A school is created one time, and years are created annually.
We haven't seen any mockups, so I'm not sure I understand your use case well.
If you keep the persistent values such as:
You can add a 'year', which contains classes and rates separately. That way users can modify the rates, classes, holidays separately.
You can even do this with a clone function for the year itself, especially if not too much data will change. The user can then modify or add new classes and schedules as needed.
This way you can even decouple the student population from the main school object, and show comparative growth by year.
You could categorise your data into options, settings, properties ect.
There are no exact definitions but you can find some useful information here