【发布时间】:2021-09-25 20:18:29
【问题描述】:
(抱歉标题不好)
一名学生参加课程。学生可以预付 x 节课的费用,即学生可以购买五节课的套餐。我的第一个问题是,我如何跟踪所有这些课程何时“用完”?
学生也可以预订课程。当学生预订课程时,学生将在月底收到账单。我如何跟踪课程是否已付费?
它的工作原理是使用带有“paid_on”列的课程实体来跟踪课程的付费时间,这解决了我的第二个要求(学生可以预订课程)。但是,我如何跟踪预付费课程?我能想出的唯一解决方案是在学生实体中添加一个“number_of_prepaid_lessons”,它是一个固定数字,或者随着使用他们的 student_id 创建的每节课而减少。这感觉不是最佳解决方案,因为当学生取消课程时需要大量逻辑(我不希望从他们的预付费中删除该课程)。
【问题讨论】:
-
mysql或postgresql这就是问题.....但是您真正使用的是哪一个?使用edit 删除您不使用的那个。 -
"number_of_prepaid_lessons" in the student entity that's either a fixed number, or ...不要使用固定数字,因为您将如何处理额外的预付款?以及如何跟踪number_of_prepaid_lessons的消耗部分。只需减少每节课的费用(payed_on 填充一个值),如果学生取消课程,则将number_of_prepaid_lessons增加 1。 -
如果您更新
number_of_prepaid_lessons和paid_on,您应该在一个transaction 中执行此操作,以确保两个字段都得到更新,或者没有字段得到更新。 -
当然,这只会导致负数,如果您在减去 1 之前不检查
number_of_prepaid_lessons是否大于 1。 -
学生能否参加 (a) 预付费 XOR 后付费课程,(b) 预付费和/或后付费课程?
标签: sql postgresql database-design