DataBase deasign and model relationship

Hello, I am new to Django and had some simple projects till now. My goal is to be able to create a SMS (School Management System) with different user-types which this part I figured it out with using AbstractUser and UserTypeProfile model and signals. Now I need to understand how to design the relationships between the models so that I could keep a separate record of all my models related to each teacher, staff, student, parent, class, classroom, section, department, exam, exam-result, transcript, attendance, subject, payments, … for each academic year and also being able to upgrade the student (to the next academic year when the student successfully graduates from his current grade-level) in case of the new academic year so that his data related to the last academic year be safe and separated like an archive and having the same new tables empty ready to be filled in the current academic year.
I would appreciate any kind of hint and guidance. Thanks.

This really isn’t a Django-specific issue, this is a general database design issue.

What you’re looking for are some tutorials or documentation on database design and database normalization. (Sorry, I don’t have any references I can provide or recommendations to make.)

Thank you very much.