2012-02-08 11 views
-1

私は学校をコントロールするためのプログラムを書いています。 メンバーシップの購読スキルによく似ています。 生徒はコースに応募し、学校カレンダーで定義された特定の時間の残りの間、月間料金を徴収する必要があります。支払いデータベースの設計方法は?

いくつかの特定の生徒には、それぞれの場合に応じて、碑文または月額料金を減らすことができます。 受講者がコースに登録すると、再受講料となります。 受講者は部分支払いを行うことができます。 また、学生は辞めることができ、戻ってくることはありません。

私はテーブルのこのようなものが付属しています

STUDENT 
+id 
+name 

COURSE 
+id 
+name 
+inscription_fee 
+monthly_fee 

SCHEDULED_PAYMENTS 
+id 
+student_id 
+description 
+amount 

-LEDGER 
+id 
+student_id 
+course_id 
+amount 

しかし、私は

など、私は学生が支払っているかを知りたいとき、ウィッヒ月額料金が原因である、長い複雑なクエリになってしまいました

だから私は、これは支払いのためのデータベースを設計する正しい方法ですか?それとも良い方法がありますか?

+2

のクラスごとに、月額利用料および手数料の両方を持っている「右の方法は。」 –

+0

正しい方法はたくさんありますが、それらをテストすることはできません。そのため、まず最初に間違った方法で行うべきではありません。 –

+0

計算された値を格納していて、間違った方法でマークしていますか? – mcanedo

答えて

-1

私は、元帳と予定された支払いを1つのテーブルとして入れました。支払いが期限切れの場合はそれを追加し、支払われた場合は支払いとしてそれをマークします。しかし、@Marrgallが指摘しているように、実際にそれを行う正しい方法はなく、あなたはフィールド内でたくさんの複雑なクエリを見つけることができます。あなたはそれに慣れ親しんでいるかもしれません。

+0

支払い金額と支払い金額の差額を計算するのではなく、支払ったことが良い習慣になっていますか? – mcanedo

+0

私が支払ったと言うとき、私は別の元帳の代わりにそこにそれを更新すると話していました。あなたが元帳を保管していた場合は、支払いが予定されていることを知るために予定された支払いにリンクします。コースはスケジュールされた支払いでリンクされるべきですが、学生とコースにリンクする必要はありません。 – thenetimp

0

私はあなたが必要とするすべてのものをもちろん

学生 + ID、+名前

コース を取っている学生学籍テーブル、およびあなたのコーステーブル、ショーの間で続いてリンクテーブルだと思います+ ID、次いで+名、+料、+ monthly_fee

Student_course + STUDENT_ID + Course_IDに

select * 
FROM student 
JOIN student_course on student.id = student_course.student_id 
JOIN course on course.id = student_course.coruse_id 
where student.name = ? 

は次にあなたがあれば、めったにありません学生