我想建立一个非常基本的每日销售报告。我正在尝试决定如何构建数据库以最好地实现这一目标。这是它的一个用例:
我当前的结构是:
PROVIDER table
PRODUCT table
start_date
和end_date
是产品可能发生销售的时间。仅供参考,不影响其他。
SALES table
sales
是该产品销售的每日收益(美元)。
我不太确定如何存储销售额。销售额仅按每种产品的每日总和计算。构建
SALES
表的最佳方式是什么?
产品表:
销售表:
通过上述设置,您可以根据需要在
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。如果您选择在本地时区存储,并且进行任何需要从本地时区进行转换的销售,您将会遇到很多麻烦。
为什么销售表中没有日期字段?这将使每条记录都记录特定产品在特定日期的销售总额。