数据库设计:如何跟踪预付费课程和课后付费课程?
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
的列,并根据 booked
、cancelled
、ongoing/paid
管理课程.您将决定要将哪些 statuses
计入,哪些不计入。
您还可以带另一个名为 package
的 table 并将 package_id
保留在 lessons
table 中以跟踪哪些课程在某个包下。 package
table 可能包含 id
、package_name
、lesson_count
、package_amount
、valid_from
、valid_to
等列等等
您可以通过加入 package
table 从 lessons
table 中获取特定 student
的 lessons
计数package_id
用于 lessons
具有有效 enrollment_status
的特定包。此搜索还可能在搜索条件中包含给定的日期范围,这些日期范围位于包裹的 between valid_from and valid_to
日期。
您还可以仅查看特定学生所学课程的 enrollment_status
来跟踪预订的课程。
(抱歉标题不好)
一名学生参加了课程。学生可以预付 x-amount 节课的费用,即学生可以购买五节课的套餐。我的第一个问题是,我如何跟踪所有这些课程何时“用完”?
学生也可以预约课程。当学生预订课程时,学生将在月底收到账单。我如何跟踪是否已支付课程费用?
我目前的解决方案是这样的:
它的工作原理是有一个带有“paid_on”列的课程实体来跟踪课程的支付时间,这解决了我的第二个要求(学生可以预订课程)。但是,如何跟踪预付费课程?我能想出的唯一解决方案是在学生实体中添加一个“number_of_prepaid_lessons”,它要么是固定数字,要么随着他们的 student_id 创建的每节课而减少。这感觉不是最佳解决方案,因为它需要很多逻辑,例如当学生取消课程时(我不希望从他们的预付费中删除该课程)。
您可以在 lessons
table 中使用名为 enrollment_status
的列,并根据 booked
、cancelled
、ongoing/paid
管理课程.您将决定要将哪些 statuses
计入,哪些不计入。
您还可以带另一个名为 package
的 table 并将 package_id
保留在 lessons
table 中以跟踪哪些课程在某个包下。 package
table 可能包含 id
、package_name
、lesson_count
、package_amount
、valid_from
、valid_to
等列等等
您可以通过加入 package
table 从 lessons
table 中获取特定 student
的 lessons
计数package_id
用于 lessons
具有有效 enrollment_status
的特定包。此搜索还可能在搜索条件中包含给定的日期范围,这些日期范围位于包裹的 between valid_from and valid_to
日期。
您还可以仅查看特定学生所学课程的 enrollment_status
来跟踪预订的课程。