Ищите вклад в дизайн модели для школ Джанго - PullRequest
2 голосов
/ 05 декабря 2008

Сегодня я начинаю небольшой проект по созданию программы школьного администрирования на основе Django. Я в настоящее время разрабатываю модели и их соответствующие отношения. Будучи довольно новым для Django и реляционных баз данных в целом, я хотел бы получить некоторую информацию.

Прежде чем я покажу вам текущую модель, вам необходимо понять, для чего предназначена программа. Помните, что моя цель - чтобы программное обеспечение могло использоваться как отдельными школами, так и целыми школьными системами.

Особенности: - Создать несколько школ
- Отслеживание численности учащихся на школу
- Отслеживать демографические данные учащихся, контактную информацию родителей и т. Д.
- зачетные книжки
- стенограммы
- Отслеживать дисциплинарные записи.
- Графики платежей и отслеживания платежей
- Создание отчетов (активность учащихся, стенограммы учащихся, успеваемость в классе, успеваемость по демографическим данным, отчеты об оплате, дисциплинарный отчет по классам учащихся и демография)
- Автоматизированный PDF отчет по электронной почте для родителей для отчетов учащихся.

Учитывая эти требования к функциям, вот макет модели, который у меня сейчас есть: Модели

* 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

Если у вас есть идеи о том, как это можно улучшить, я бы с радостью подарил им год!

Обновление

Я написал исходный код models.py, который, вероятно, нуждается в большой любви. Если вы хотите посмотреть или даже присоединиться к проекту, перейдите по ссылке.
http://bazaar.launchpad.net/~djangoschools/djangoschools/trunk/files

Ответы [ 7 ]

1 голос
/ 06 декабря 2008

Некоторые возможные проблемы:

Что касается объекта местоположения, что если в будущем вам понадобится сохранить домашний адрес, рабочий адрес и т. Д. Для человека? То же самое для адресов электронной почты и телефонных номеров - я бы хотел, чтобы телефонные номера были их собственным объектом.

Включить Address_3 в ваш адресный объект.

1 голос
/ 05 декабря 2008

Беглый взгляд, я думаю, что он достаточно всеобъемлющий. Возможно, вам следует включить в курс несколько учителей и разрешить повторное использование адресов / местоположений между родителями и учениками.

Как правило, я бы сказал, что вы должны начать реализацию, и тогда вы найдете, где вам нужно улучшение.

0 голосов
/ 25 января 2010

У ученика нет класса. Он / она посещает класс, в котором они есть (в списке). Вот еще один способ взглянуть на ситуацию в классе. (обратите внимание на название модели. Это просто потому, что я не назову ничего «Класс», потому что так легко попасть в столкновения имен.)

class SchoolClass(models.Model):
    teacher = models.ManyToManyField(Teacher, related_name='teachers')
    student = models.ManyToManyField(Student, related_name='students')
    prerequisites = models.ForeignKey('self')
    startdate = models.DateField()
    enddate = models.DateField()
    ... and so on ...

Это более естественно, потому что вы можете посещать занятия со студентами и посещать занятия в соответствии со списком учеников, или обобщать оценки, возраст учеников и т. Д. Естественным образом.

0 голосов
/ 06 декабря 2008

Я бы посоветовал вам не беспокоиться о подчиненной реляционной базе данных. Да, вам нужно понять, что такое внешний ключ и разницу между многими ко многим и один ко многим и т. Д., Но вы должны думать о своих моделях с точки зрения классов Django. Так или иначе, вам придется их написать, поэтому я бы начал с этого. Документация Django на моделях великолепна и очень вам поможет.

Я думаю, что все здесь были бы рады помочь вам с классами Python; Вы должны переписать свой пример, используя Django. Например, ваша таблица Person будет выглядеть так:

from django.db import models

SEX_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female')
)

ETHNICITY_CHOICES = (
    # follow the same format as SEX_CHOICES:
    # (database_value, human_friendly_name)
)

class Person(models.Model):
    first_name   = models.CharField(max_length=200)
    middle_name  = models.CharField(max_length=200)
    familiy_name = models.CharField(max_length=200) 

    sex = models.CharField(max_length=1, choices=SEX_CHOICES)
    ethnicity  = models.CharField(max_length=1, choices=ETHNICITY_CHOICES)
    birth_date = models.DateField()

    email = models.EmailField()
    home_phone = models.CharField(max_length=10) # USA phone numbers
    work_phone = models.CharField(max_length=10)
    cell_phone = models.CharField(max_length=10)
    address = models.ForeignKey(Location)

class Location(models.Model):
    # left as an exercise for the reader

# more classes...
0 голосов
/ 05 декабря 2008

Вы должны связать paiement (транзакцию) с заинтересованным лицом.

0 голосов
/ 05 декабря 2008

эй ... я согласен ... это выглядит довольно хорошо. кто-то посоветовал мне использовать автоинкремент во всех таблицах, чтобы быть уверенным, что в каждой записи действительно есть уникальный идентификатор. Это ваш выбор, если вы хотите пойти по этому пути.

0 голосов
/ 05 декабря 2008

Похоже, интересный проект. Обратите внимание, что Django имеет типы более высокого уровня, чем SQL, поэтому вы можете использовать такие вещи, как тип адреса электронной почты.

Если вы планируете таргетировать GAE , вы должны найти такой же богатый набор типов моделей .

...