数据库设计:如何跟踪预付费课程和课后付费课程?

Database design: How do I keep track of prepaid lessons aswell as paid after lessons?

(抱歉标题不好)

一名学生参加了课程。学生可以预付 x-amount 节课的费用,即学生可以购买五节课的套餐。我的第一个问题是,我如何跟踪所有这些课程何时“用完”?

学生也可以预约课程。当学生预订课程时,学生将在月底收到账单。我如何跟踪是否已支付课程费用?

我目前的解决方案是这样的:

它的工作原理是有一个带有“paid_on”列的课程实体来跟踪课程的支付时间,这解决了我的第二个要求(学生可以预订课程)。但是,如何跟踪预付费课程?我能想出的唯一解决方案是在学生实体中添加一个“number_of_prepaid_lessons”,它要么是固定数字,要么随着他们的 student_id 创建的每节课而减少。这感觉不是最佳解决方案,因为它需要很多逻辑,例如当学生取消课程时(我不希望从他们的预付费中删除该课程)。

您可以在 lessons table 中使用名为 enrollment_status 的列,并根据 bookedcancelledongoing/paid 管理课程.您将决定要将哪些 statuses 计入,哪些不计入。

您还可以带另一个名为 package 的 table 并将 package_id 保留在 lessons table 中以跟踪哪些课程在某个包下。 package table 可能包含 idpackage_namelesson_countpackage_amountvalid_fromvalid_to 等列等等

您可以通过加入 package table 从 lessons table 中获取特定 studentlessons 计数package_id 用于 lessons 具有有效 enrollment_status 的特定包。此搜索还可能在搜索条件中包含给定的日期范围,这些日期范围位于包裹的 between valid_from and valid_to 日期。

您还可以仅查看特定学生所学课程的 enrollment_status 来跟踪预订的课程。