【问题标题】:How to design a payments database?如何设计支付数据库?
【发布时间】:2012-02-08 18:41:38
【问题描述】:

我正在编写一个程序来控制一所学校。 它更像是会员订阅模式。 学生申请一门课程,并且必须在校历规定的特定时间的剩余时间内按月支付铭文广告费用。

根据每个案例,某些特定学生的铭文或月费可以减少。 一旦学生订阅一门课程,这将是定期付款, 学生可以部分付款。 此外,学生可以退出,并且永远不会回来。

我有类似这样的表格:

STUDENT
+id
+name

COURSE
+id
+name
+inscription_fee
+monthly_fee

SCHEDULED_PAYMENTS
+id
+student_id
+description
+amount

-LEDGER
+id
+student_id
+course_id
+amount

但当我想知道学生支付了哪些费用、应支付的月费等信息时,我遇到了冗长复杂的查询。

所以我问,这是设计支付数据库的正确方法吗?还是有更好的方法?

【问题讨论】:

  • 很少有(如果有的话)“正确的方法”。
  • 正确的方法有很多,但你无法测试那些,所以你的目标应该是,首先不要用错误的方法。
  • 是否存储计算值,并标记方式错误?

标签: mysql database-design


【解决方案1】:

我认为你只需要你的学生表和课程表,然后在两者之间建立一个链接表来显示哪个学生正在学习什么课程

学生 +id, +name

课程 +id, +name, +fee, +monthly_fee

学生课程 +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 = ?

那么你有每个学生的月费和费用

【讨论】:

    【解决方案2】:

    我会将分类帐和预定付款放在一张表中。当付款到期时添加它,如果它被支付,则将其标记为已支付。但是正如@Marrgall 所指出的那样,确实没有正确的方法可以做到这一点,并且您会在该领域发现大量冗长的复杂查询。所以你不妨习惯它。

    【讨论】:

    • 标记为已付款是一种好的做法吗?而不是计算到期金额和已付金额之间的差额?
    • 好吧,当我说标记为已付款时,我更想说的是你会在那里更新它而不是在单独的分类帐中。如果您保留分类帐,我会将其链接到预定付款以了解付款情况,无需将其链接到学生和课程,尽管课程应该在预定付款中链接。
    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 2021-10-28
    • 2019-05-05
    • 2012-08-04
    • 2015-10-29
    • 2016-06-28
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多