关于价格变化的数据库表设计

时间:2022-11-15 14:52:13
我有个需求,就是一个店里面需要将当天的销售的蔬菜录入进库,但素菜的价格每月都会变化格式如下:
关于价格变化的数据库表设计
请问我要怎么设计表呀?
是要设计两张表吗?如果是做两张那做年统计会不会很麻烦呀?

10 个解决方案

#1


日期、茶叶名、单价、数量

#2


如果是一个月一变的话可以设计两个表,做统计也不会麻烦。
如果是每次录入都可能不一样则一个表就好。

#3


价格是每月变化一次,但是单项好多,也就是说茶叶的种类会有60多种,考虑(年,月,周)报表会经常查看,所以就不知道用一个表统计好还是用两个表做统计好点

#4


引用 3 楼 peeperp 的回复:
价格是每月变化一次,但是单项好多,也就是说茶叶的种类会有60多种,考虑(年,月,周)报表会经常查看,所以就不知道用一个表统计好还是用两个表做统计好点

空间换时间的问题。
一个表的话冗余数据多点,但是统计不需要关联表,速度会快。
如果两个表,没有数据冗余但是读取速度不如一个表快。

#5


设计4 张表吧
1. 茶叶表
     茶叶代码    茶叶名称

2. 茶叶每月价格表
    茶叶代码    年月     单价

3. 茶叶销售主表
    销售单号   销售日期    销售员

4. 茶叶销售明细表
    序号   茶叶代码   单价(自动调出)   销售数量  


#6


引用 4 楼 sinat_28984567 的回复:
Quote: 引用 3 楼 peeperp 的回复:

价格是每月变化一次,但是单项好多,也就是说茶叶的种类会有60多种,考虑(年,月,周)报表会经常查看,所以就不知道用一个表统计好还是用两个表做统计好点

空间换时间的问题。
一个表的话冗余数据多点,但是统计不需要关联表,速度会快。
如果两个表,没有数据冗余但是读取速度不如一个表快。


一张表的话,应该怎么设计呢?我开始的想法用一张表,就和一楼说的那样,但是考虑到统计的时候每个小类是横向展示出来,不知道怎么做统计,所以就在纠结是不是要用两张表,一个存类别和数据,一个存单价。
能说下单表如何做统计吗?统计就如我上图那样

#7


仅供参考:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Date,[茶叶名] nvarchar(22),[单价] decimal(18,7),[数量] int)
Insert #T
select '2017-4-1',N'龙井',1.2,10 union all
select '2017-4-2',N'龙井',1.2,20 union all
select '2017-4-3',N'龙井',1.2,30 union all
select '2017-5-1',N'龙井',2.2,10 union all
select '2017-4-1',N'普洱',7.2,100 union all
select '2017-4-2',N'普洱',7.2,200 union all
select '2017-4-3',N'普洱',7.2,300 union all
select '2017-5-1',N'普洱',9.2,100
Go
--测试数据结束
SELECT  日期 ,
        MAX(CASE WHEN 茶叶名 = '龙井' THEN 数量
                 ELSE 0
            END) AS 龙井数量 ,
        MAX(CASE WHEN 茶叶名 = '龙井' THEN 单价
                 ELSE 0
            END) AS 龙井单价,
        MAX(CASE WHEN 茶叶名 = '普洱' THEN 数量
                 ELSE 0
            END) AS 普洱数量,
        MAX(CASE WHEN 茶叶名 = '普洱' THEN 单价
                 ELSE 0
            END) AS 普洱单价
FROM    #T
GROUP BY 日期


关于价格变化的数据库表设计

#8


做成一个类型表,一个统计表和一个流水表会不会好点?

#9


如果是我,我就用2个表,1个是库存表,1个是销售表,牺牲冗余数据

-- 库存表
茶叶代码,茶叶名称,库存单价,库存数量,日期

--销售表
茶叶代码,茶叶名称,库存单价,销售数量,销售价格,日期

这样,每个时间点都是带库存单价和销售价格的,以后不管你在什么时候统计,都不影响

#10


如果,你想把你的每月库存价格都保存起来,以后查看,你就多1个表,成本表,记录每个物料,每个月的成本。
库存表的价格,取当月的价格。
销售表的价格,取库存表的价格。
这样,带成本价格,销售价格的,销售表,你在什么时候查询都是准的。。。

#1


日期、茶叶名、单价、数量

#2


如果是一个月一变的话可以设计两个表,做统计也不会麻烦。
如果是每次录入都可能不一样则一个表就好。

#3


价格是每月变化一次,但是单项好多,也就是说茶叶的种类会有60多种,考虑(年,月,周)报表会经常查看,所以就不知道用一个表统计好还是用两个表做统计好点

#4


引用 3 楼 peeperp 的回复:
价格是每月变化一次,但是单项好多,也就是说茶叶的种类会有60多种,考虑(年,月,周)报表会经常查看,所以就不知道用一个表统计好还是用两个表做统计好点

空间换时间的问题。
一个表的话冗余数据多点,但是统计不需要关联表,速度会快。
如果两个表,没有数据冗余但是读取速度不如一个表快。

#5


设计4 张表吧
1. 茶叶表
     茶叶代码    茶叶名称

2. 茶叶每月价格表
    茶叶代码    年月     单价

3. 茶叶销售主表
    销售单号   销售日期    销售员

4. 茶叶销售明细表
    序号   茶叶代码   单价(自动调出)   销售数量  


#6


引用 4 楼 sinat_28984567 的回复:
Quote: 引用 3 楼 peeperp 的回复:

价格是每月变化一次,但是单项好多,也就是说茶叶的种类会有60多种,考虑(年,月,周)报表会经常查看,所以就不知道用一个表统计好还是用两个表做统计好点

空间换时间的问题。
一个表的话冗余数据多点,但是统计不需要关联表,速度会快。
如果两个表,没有数据冗余但是读取速度不如一个表快。


一张表的话,应该怎么设计呢?我开始的想法用一张表,就和一楼说的那样,但是考虑到统计的时候每个小类是横向展示出来,不知道怎么做统计,所以就在纠结是不是要用两张表,一个存类别和数据,一个存单价。
能说下单表如何做统计吗?统计就如我上图那样

#7


仅供参考:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Date,[茶叶名] nvarchar(22),[单价] decimal(18,7),[数量] int)
Insert #T
select '2017-4-1',N'龙井',1.2,10 union all
select '2017-4-2',N'龙井',1.2,20 union all
select '2017-4-3',N'龙井',1.2,30 union all
select '2017-5-1',N'龙井',2.2,10 union all
select '2017-4-1',N'普洱',7.2,100 union all
select '2017-4-2',N'普洱',7.2,200 union all
select '2017-4-3',N'普洱',7.2,300 union all
select '2017-5-1',N'普洱',9.2,100
Go
--测试数据结束
SELECT  日期 ,
        MAX(CASE WHEN 茶叶名 = '龙井' THEN 数量
                 ELSE 0
            END) AS 龙井数量 ,
        MAX(CASE WHEN 茶叶名 = '龙井' THEN 单价
                 ELSE 0
            END) AS 龙井单价,
        MAX(CASE WHEN 茶叶名 = '普洱' THEN 数量
                 ELSE 0
            END) AS 普洱数量,
        MAX(CASE WHEN 茶叶名 = '普洱' THEN 单价
                 ELSE 0
            END) AS 普洱单价
FROM    #T
GROUP BY 日期


关于价格变化的数据库表设计

#8


做成一个类型表,一个统计表和一个流水表会不会好点?

#9


如果是我,我就用2个表,1个是库存表,1个是销售表,牺牲冗余数据

-- 库存表
茶叶代码,茶叶名称,库存单价,库存数量,日期

--销售表
茶叶代码,茶叶名称,库存单价,销售数量,销售价格,日期

这样,每个时间点都是带库存单价和销售价格的,以后不管你在什么时候统计,都不影响

#10


如果,你想把你的每月库存价格都保存起来,以后查看,你就多1个表,成本表,记录每个物料,每个月的成本。
库存表的价格,取当月的价格。
销售表的价格,取库存表的价格。
这样,带成本价格,销售价格的,销售表,你在什么时候查询都是准的。。。