我们正在实施一个系统,在这个系统中,用户可以购买用于两个项目的“信用”。我希望能就如何实施这一制度提出建议。我们有两种消费信贷方式: ItemA和ItemB。
例如,在购买信贷时,用户可以批量购买信贷,从而降低信贷成本(这不是真正的成本,只是一个例子):
Cost | Cost ItemA (each) | Cost ItemB (each)
-----------------------------------------------
$400 | 16c | 10c
$800 | 12c | 8c
$1200 | 8c | 4c一个示例场景:
一个用户获得了400美元的学分,然后在下周购买了1200美元的学分。这意味着他们可能在16c (ItemA)和10c (ItemB)时各有400美元的学分,在系统中还有8c (ItemA)和4c (ItemB)的1200个学分。
用户将在系统中看到的是,他们总共有1600美元的学分(1200+400)可用,当他们消费信贷,它将减少总额的支出,例如:
- Spend 2000 of ItemA
Reduce by $320 (16c each), $80 remaining of first credit buy
$1280 overall remaining
- Spend 2000 of ItemB
Reduce by $80 (10c each) 800 credits
Reduce by $48 (4c each) 1200 credits我们有一个数据库来存储学分,它将以密钥的形式分发,该密钥包含它包含的学分数量以及验证检查。花费的项目(如ItemA或ItemB )也将存储在数据库中。
您将如何在数据库表结构和逻辑上实现上述内容,以计算剩余和花费的学分?
发布于 2018-07-17 15:23:12
你需要的是一张列有商品及其基本价格的表格,然后把它与给定数量的数量和折扣表结合起来。
公式为:调整后的价格=基准价格-给定数量的折扣
样本“物品”表:
+------------------------+
| Items |
+----+------+------------+
| Id | Name | Base Price |
| 1 | A | 16 |
| 2 | B | 10 |
+----+------+------------+和一张用来计算折扣的表格:
+-------------------------------+
| Item Discounts |
+---------+----------+----------+
| Item ID | Quantity | Discount |
| 1 | 25 | 0 |
| 1 | 67 | 4 |
| 1 | 150 | 8 |
| 2 | 40 | 0 |
| 2 | 100 | 2 |
| 2 | 300 | 6 |
+---------+----------+----------+这为您在定义折扣(和重新定义折扣)方面提供了很大的灵活性,而无需重新设计应用程序。折扣变成了数据驱动。
创建一个数据库视图来平平这两个表,并计算折扣价格,使您的工作在应用程序级别上更容易:
+-------------------------------------------------------------+
| Item Discounts View |
+---------+----------+----------+------------+----------------+
| Item ID | Quantity | Discount | Base Price | Discount Price |
| 1 | 25 | 0 | 16 | 16 |
| 1 | 67 | 4 | 16 | 12 |
| 1 | 150 | 8 | 16 | 8 |
| 2 | 40 | 0 | 10 | 10 |
| 2 | 100 | 2 | 10 | 8 |
| 2 | 300 | 6 | 10 | 4 |
+---------+----------+----------+------------+----------------+“折扣价格”是项目的基本价格与每一行当前折扣之间的差额。这可以在数据库视图中自动计算,查询价格可以非常简单:
SELECT "Discount Price"
FROM "Item Discounts View"
WHERE "Item ID" = 1
AND "Quantity" <=
ORDER BY "Quantity" DESC
LIMIT 1;由于这是适当的正常化,调整一个项目的基本价格将级联到视图,所有的价格(包括折扣)将立即调整。它还为您提供了一个数据集,以便在将事务拆分时引用(前25个是16c,接下来的67个是12c,等等)。
这种数据库视图有一个额外的好处,就是可以作为数据源向购物者显示,告知他们在进行交易之前可以得到的折扣。市场部可能会喜欢的。
https://softwareengineering.stackexchange.com/questions/375312
复制相似问题