【问题标题】:SQL Database Design for monthly issued coupons每月发行的优惠券的 SQL 数据库设计
【发布时间】:2018-10-02 06:32:28
【问题描述】:

我正在努力解决我遇到的问题的数据库架构。

假设我拥有一家向不同公司销售月度服务(清洁)的企业。 但是,我会给公司每月可保存的“优惠券”,根据他们的用户数量,它们就像减少(5 美元)一样。

例子:

现在是 2018 年 4 月 XYZ 公司必须为我的企业每月的清洁服务支付 1.000 美元。 XYZ 有 5 名员工,因此他们将在 4 月份有 5 张优惠券。

但是,由于优惠券可以保存(为期 2 个月),XYZ 公司将不会使用仅 4 月的优惠券,也不会使用 3 月的优惠券(因为他们没有使用任何当月和 2 月的优惠券已经使用上)。

结果: 4 月发票上使用了 10 张优惠券(3 月 5 日,4 月 5 日): 支付总额 950 美元


我的事情是我想自动化这个。一键点击按钮,我的系统将不得不检查:

  • 有多少用户
    • 如果过去 2 个月有任何未使用的优惠券(如果存在,请先使用)
    • 将优惠券应用于他们的发票。

我想先在数据库中设计这个,但我很挣扎:

这是我的设计

  • 公司

    • 公司编号
    • 姓名
  • 用户

    • 用户 ID
    • 公司ID
    • 用户 ID

现在我正在为优惠券设计而苦苦挣扎,我该如何开发它以便我可以自动化我的问题。 我需要每月为每个公司保存优惠券。

我的想法是这样做:

  • Company_Month_Coupon
    • 公司ID
    • Coupon_Count

我不确定我是否可以在一张桌子上执行此操作,并且我不确定以下问题:

  • 如果我的程序用户决定取消发票,我的系统如何知道优惠券是从哪个月份来的?

在优惠券共享系统中建议采用什么设计?

任何解决此问题的建议将不胜感激。

【问题讨论】:

    标签: sql database database-design


    【解决方案1】:

    “我需要每月为每个公司保存优惠券。”

    也许你可以做相反的事情。在数据库中不存储可以使用的优惠券,而只存储实际使用的优惠券,例如在“used_coupons”表中

    这个想法是默认放弃优惠券,因此存储它们没有意义。只需要保存使用过的优惠券即可。

    结帐时,您需要了解公司中有多少用户以及过去两个月内保存了多少“使用过的优惠券”。

    如果返回 X 个优惠券,则需要从“used_coupons”表中删除最新的 X 个优惠券。

    【讨论】:

      【解决方案2】:

      我会接受你的想法,并有 2 张桌子:InvoicesInvoices_UsedCoupons

      Invoices:

      • ID(主键)
      • 公司ID
      • 状态(如果您不想从数据库中删除,请在发票上设置取消状态)

      Invoices_UsedCoupons:

      • InvoiceId(Invoices 表的外键)
      • Coupon_Count
      • 月份(此字段用于Company_Month_Coupon表中已使用的优惠券)

      原因:

      • 我们仍应存储已发放的优惠券(在您的Company_Month_Coupon 表中),因为每个月的员工人数都可能发生变化。这意味着每当员工人数发生变化时,您都必须跟踪发放的优惠券。

      • 通过InvoicesInvoices_UsedCoupons表格,您可以轻松计算实际使用的优惠券和剩余的优惠券。

      如果我的程序用户决定取消发票,我会怎么做? 系统知道优惠券是哪一个月来的?

      所有信息都在InvoicesInvoices_UsedCoupons 表中提供。如果您想在取消发票后收回优惠券,也很容易做到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-20
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 2018-02-14
        • 1970-01-01
        • 2017-08-16
        相关资源
        最近更新 更多