2

今日は、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

4

7 に答える 7

1

一見すると、かなり包括的だと思います。おそらく、コースに複数の教師を許可し、保護者と生徒の間で住所/場所の再利用を許可する必要があります。

原則として、実装を開始する必要があります。そうすれば、改善が必要な箇所を見つけることができます。

于 2008-12-05T19:51:46.323 に答える
1

考えられる問題:

位置オブジェクトについて、将来、個人の自宅住所、勤務先住所などを保持する必要がある場合はどうなるでしょうか? メールアドレスと電話番号についても同じです。電話番号を独自のオブジェクトにします。

アドレス オブジェクトに Address_3 を含めます。

于 2008-12-05T21:41:53.027 に答える
0

学生にはクラスがありません。彼/彼女は(名簿に)彼らがいるクラスに出席します。クラスの状況を見る別の方法を次に示します。(モデルの名前に注意してください。これは、名前が衝突しやすいため、「クラス」という名前を付けない傾向があるためです。)

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

学生と一緒に授業を行い、学生リストに従って出席を取ったり、成績や学生の年齢などを自然な方法で集計したりできるため、これはより自然です。

于 2010-01-25T19:36:01.463 に答える
0

基礎となるリレーショナル データベースについては心配しないことをお勧めします。はい、外部キーとは何か、多対多と 1 対多の違いなどを理解する必要がありますが、モデルについては 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...
于 2008-12-05T22:33:48.320 に答える
0

興味深いプロジェクトのようです。Django には SQL よりも高レベルの型があるため、電子メール アドレス型などを利用できることに注意してください。

GAEをターゲットにすることを計画している場合は、同様に豊富なモデル タイプのセットを見つける必要があります。

于 2008-12-05T20:16:53.667 に答える
0

ねえ...同意します...それはかなり良さそうです。誰かが、すべてのレコードに一意の ID があることを確認するために、すべてのテーブルで自動インクリメントを使用するようにアドバイスしました。その道を進みたいのであれば、それはあなたの選択です。

于 2008-12-05T20:19:08.497 に答える
0

支払(取引)を本人に紐付けてください。

于 2008-12-05T20:40:28.737 に答える