您将如何为栏选项卡设计数据库? [已关闭]

问题描述 投票:0回答:1

我正在构建一个应用程序,它将帮助酒吧跟踪顾客的运行标签。然而,有一些关键的曲折:

  1. 在我所在的地区,酒吧喜欢举办不同的促销活动:例如,Bar 1 经常举办马提尼酒售价 10 美元、Cosmopolitans 售价 10 美元的促销活动。但是,如果您在当晚购买 1 杯马提尼酒和 2 杯大都会酒,则只需支付
    $22 total (instead of $30)
    。请注意,账单是在晚上结束时计算的,而不是按订单计算的。
  2. 偶尔会有升级费用。例如,尽管内格罗尼的售价为 15 美元,但升级到实际提供内格罗尼的高级酒吧却需要支付每晚 10 美元的一次性费用。例如,如果顾客购买 3 杯内格罗尼,那么他们当晚的最终账单将是:
    $10 (one-time fee) + 3 * $15 = $55

这些交易和一次性费用真的让我很失望。我大致了解,我可以使用

Deal
表(包括所需饮料的链接)和
UpgradeFee
表对它们进行建模。然而,我很难在以下两者之间做出决定:

  • 我是否只是累积客户的饮酒量并在读取时即时评估他们的最终账单
  • 我是否会在状态之间缓存一些内容以更快地计算最终账单,但会导致复杂的问题,例如:之前的客户有资格享受交易 1,但在另一杯饮料之后就有资格享受交易 2?

通常酒吧老板喜欢检查他们整个晚上的表现,因此我需要快速返回 10K 顾客的运行总额。我猜读写比大约是2:1。你们会如何设计这个数据库来计算运行总计?

mysql database postgresql database-design language-agnostic
1个回答
0
投票

让我快速写一个设计

TABLES:
Customer:
- customer_id (primary key)
- name
- other relevant customer information

Drinks:
- drink_id (primary key)
- name
- price

Deals:
- deal_id (primary key)
- required_drinks (a list of drink_ids)
- discounted_price

UpgradeFees:
- upgrade_fee_id (primary key)
- upgrade_fee_name
- upgrade_fee_amount

RunningTotals:
- customer_id (foreign key to Customers table)
- running_total
© www.soinside.com 2019 - 2024. All rights reserved.