我想建立一份非常基本的每日销售报告。我正在尝试决定如何构建数据库以最好地实现这一目标。这是一个用例:
我目前的结构是:
PROVIDER table
PRODUCT table
start_date
和end_date
是指产品销售可能发生的时间。它仅用于参考,并不会影响其他任何内容。
SALES table
sales
将是该产品销售的每日进度($)。
我不太确定如何存储销售。销售额仅计算为每种产品的每日总和。构建SALES
表的最佳方法是什么?谢谢。
答案 0 :(得分:3)
产品表:
销售表:
通过上述设置,您可以根据product
表中的内容更改价格,但不会影响sales_transaction
表中记录的已发生的销售额。
伪架构:
product
:
sales_transaction
:
provider
:
现在,您可以按照问题中的要求运行查询,以获取任何提供商的任何日期的任何产品的摘要。
示例查询:
# On Jan 5, 2011, Provider A makes $500 total off of its products
SELECT prov.*, SUM(sales.price)
FROM
provider AS prov
INNER JOIN
sales_transaction AS sales on sales.provider_id = prov.id
WHERE
provider.name = 'Provider A'
AND
sales.created_at BETWEEN '2012-01-05 00:00:00' AND '2012-01-05 23:59:59'
GROUP BY
prov.id
提供的架构本质上是骨架,因此可以根据业务需求随意添加列,但它应该让您朝着正确的方向前进。
另外,最后一条建议,我建议您将日期时间存储在UTC中。如果您选择以当地时区存储,如果您需要从当地时区进行转换,则会遇到任何令人头疼的问题。
答案 1 :(得分:0)
为什么销售表中没有日期字段?这将使每个记录成为某个特定产品的销售总额。