Today I'm starting a little project to create a Django based school administration program. I'm currently designing the models and their corresponding relationships. Being rather new to Django and relational databases in general, I would like some input.
Before I show you the current model layout, you need to have an idea of what the program is meant to do. Keep in mind that it is my goal for the software to be usable by both individual schools and entire school systems.
Features:
- Create multiple schools
- Track student population per school
- Track student demographics, parent contact info, etc.
- Grade books
- Transcripts
- Track disciplinary record.
- Fees schedules and payment tracking
- Generate reports (student activity, student transcripts, class progress, progress by demographic, payment reports, disciplinary report by student class and demographic)
-- Automated PDF report email to parents for student reports.
Given those feature requirements, here is the model layout that I currently have: Models
* Person
o ID: char or int
o FirstName: char
o MiddleName: char
o FamilyName: char
o Sex: multiple choice
o Ethnicity: multiple choice
o BirthDate: date
o Email: char
o HomePhone: char
o WordPhone: char
o CellPhone: char
o Address: one-to-one with Location
* Student (inherent Person)
o Classes: one-to-many with Class
o Parents: one-to-many with Parent
o Account: one-to-one with PaymentSchedule
o Tasks: one-to-many with Tasks
o Diciplin: one-to-many with Discipline
* Parent (inherent Person)
o Children: one-to-many with Student
* Teacher (inherent Person)
o Classes: one-to-many with Class
* Location
o Address: char
o Address2: char
o Address3: char
o City: char
o StateProvince: char
o PostalCode: char
o Country: multiple choice
* Course
o Name: char
o Description: text field
o Grade: int
* Class
o School: one-to-one with School
o Course: one-to-one with Course
o Teacher: one-to-one with Teacher
o Students: one-to-many with Student
* School
o ID: char or int
o Name: char
o Location: one-to-one with location
* Tasks
o ID: auto increment
o Type: multiple choice (assignment, test, etc.)
o DateAssigned: date
o DateCompleted: date
o Score: real
o Weight: real
o Class: one-to-one with class
o Student: one-to-one with Student
* Discipline
o ID: auto-increment
o Discription: text-field
o Reaction: text-field
o Students: one-to-many with Student
* PaymentSchedule
o ID: auto-increment
o YearlyCost: real
o PaymentSchedule: multiple choice
o ScholarshipType: multiple choice, None if N/A
o ScholarshipAmount: real, 0 if N/A
o Transactions: one-to-many with Payments
* Payments
o auto-increment
o Amount: real
o Date: date
If you have ideas on how this could be improved upon, I'd love to year them!
Update
I've written the initial models.py code, which is probably in need of much love. If you would like to take a look, or even join the project, check out the link.
http://bazaar.launchpad.net/~djangoschools/djangoschools/trunk/files