Olhando para a entrada no projeto modelo para Django Escolas

votos
2

Hoje eu estou começando um pequeno projeto para criar um programa de administração escolar baseado Django. Atualmente estou projetando os modelos e suas relações correspondentes. Sendo bastante novo para Django e bancos de dados relacionais em geral, eu gostaria de alguma entrada.

Antes de mostrar o layout modelo atual, você precisa ter uma idéia do que o programa se destina a fazer. Tenha em mente que é meu objetivo para o software a serem utilizados por ambas as escolas individuais e sistemas escolares inteiras.

Características: - Crie várias escolas
- Faixa população estudantil por escola
- Pista demografia estudante, pai informações de contato, etc.
- livros Grau
- Transcrições
- Faixa registo disciplinar.
- Taxas de horários e rastreamento de pagamento
- Gerar relatórios (atividade estudante, transcrições de estudante, progresso classe, progresso, relatórios demográficos, pagamento, relatório disciplinar pela classe estudantil e demográfica)
- Automated relatório PDF e-mail para os pais para os relatórios dos alunos.

Dado esses requisitos função aqui é o layout modelo que eu tenho atualmente: 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

Se você tem idéias sobre como isso poderia ser melhorado, eu adoraria ano eles!

Atualizar

Eu escrevi o código models.py inicial, que é provavelmente a precisar de muito amor. Se você gostaria de dar uma olhada, ou até mesmo se juntar ao projeto, confira o link.
http://bazaar.launchpad.net/~djangoschools/djangoschools/trunk/files

Publicado 05/12/2008 em 20:13
fonte usuário
Em outras línguas...                            


7 respostas

votos
1

Alguns problemas possíveis:

Para o objeto local, o que, se no futuro você precisa segurar um endereço residencial, endereço de trabalho, etc. para uma pessoa? Mesmo para os endereços de email e números de telefone - eu teria números de telefone ser seu próprio objeto.

Incluir uma Address_3 em seu objeto de endereço.

Respondeu 05/12/2008 em 22:41
fonte usuário

votos
1

De uma olhada rápida Eu acho que a sua bastante abrangente. Talvez você deve permitir que vários professores em um curso, e permitir a reutilização de endereços / locais entre pais e alunos.

Como regra geral, eu diria que você deve começar a implementar e, em seguida, você vai encontrar onde precisa melhorar.

Respondeu 05/12/2008 em 20:51
fonte usuário

votos
0

Um estudante não tem uma classe. Ele / Ela frequenta uma classe que os tem (na lista). Aqui está outra maneira de olhar para a situação de classe. (Observe o nome do modelo. Isso é só porque eu tendem a não nomear qualquer coisa 'Class' porque é fácil entrar em nome confrontos dessa forma.)

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 ...

Isso é mais natural, porque você pode ter uma aula com os alunos e levá-atendimento de acordo com a lista de estudantes, ou graus de agregação, as idades dos alunos, etc. de uma forma natural.

Respondeu 25/01/2010 em 20:36
fonte usuário

votos
0

Eu aconselho você a não se preocupar com o banco de dados relacional subalterno. Sim, você precisa entender o que uma chave estrangeira é ea diferença entre muitos-para-muitos e um-para-muitos, etc., mas você deve pensar em seus modelos em termos de classes Django. É assim que você vai ter que escrevê-los de qualquer maneira, de modo que é onde eu iria começar. O documenation Django em modelos é grande, e vai ajudá-lo muito.

Acho que todo mundo aqui ficaria feliz em ajudá-lo com as classes Python; você deve reescrever seu exemplo usando Django. Por exemplo, a tabela Pessoa ficaria assim:

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...
Respondeu 05/12/2008 em 23:33
fonte usuário

votos
0

Você deve ligar paiement (transação) para a pessoa em causa.

Respondeu 05/12/2008 em 21:40
fonte usuário

votos
0

hey ... eu concordo ... parece muito bom. alguém me aconselhou a usar auto-incremento em todas as tabelas apenas para ter certeza de que realmente é uma identificação única em cada registro. a escolha é sua, se quiser ir por esse caminho.

Respondeu 05/12/2008 em 21:19
fonte usuário

votos
0

Parece que um projeto interessante. Note que o Django tem tipos de nível mais alto do que SQL, para que possa fazer uso de coisas como o tipo de endereço de e-mail.

Se você está pensando em alvo GAE , você deve encontrar um semelhante rico conjunto de tipos de modelo .

Respondeu 05/12/2008 em 21:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more