大酒店价格表结构这样设计是否合理

酒店价格表结构这样设计是否合理
表名为Hotel_Rates, 表结构如下:
Rates_id int 主键ID  
Rooms_cod nvarchar(50) 主库房型ID
Hotel_id int 子库酒店ID  
Hotel_cod nvarchar(50) 主库酒店ID
Rooms_id int 子库房型ID  
Duration  int 年月,格式如:201101  
UpdateTime varchar(50) 价格更新时间
Gys_id nvarchar(100) 供应商ID
然后是价格 共31个字段,名称分别为 Price_1到Price_31
Price_1 varchar(50) 存储当天的价格 数据格式为 价格#早餐类型#房间数#出售状态 例如 150#0#0#0

查询价格的时候,如果是2014-9-24的话,就根据酒店id,房型id,供应商id,查询到Duration为201409,然后得到Price_24这个字段的值,但是在实际操作的时候,这个酒店价格表是和房型表,酒店表,供应商表inner join 查询的,数据量一大就出问题了, 
例如: 当查询的日期条件为9月20日和9月21日时,查询速度很慢,要一分钟左右才出结果,查询执行计划 :提示要创建的索引为:CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Hotel_Rates] ([Duration])
INCLUDE ([Hotel_cod],[Rooms_id],[Price_20],[Price_21],[Gys_id])

但问题是查询的日期条件是不固定的,在实际的操作中,可能查询的字段是Price_1到Price_31的任意多个字段,这样是无法创建固定的索引来优化的,是不是表结构要改呢?如果要改应该如何改呢?


------解决思路----------------------
改成一天一条记录是最规则最容易使用的:
Duration 改为日期
Price_1到Price_31 把 价格#早餐类型#房间数#出售状态 都拆成独立的字段。
------解决思路----------------------
最主要的,你的价格影响因素是哪些要想清楚。
我理解了一下应该是日期、房间类型、酒店类型 这3个因素。
那么自然的,你这份价格表就至少应该有这4个字段
日期(yy-mm-dd),房间类型,酒店类型,价格
------解决思路----------------------
建议单独搞个价格表吧,价格表通过酒店ID和酒店表进行关联,价格表的设计如下
酒店ID
房间ID
价格
早餐类型
出售状态

------解决思路----------------------
引用:
Quote: 引用:

建议单独搞个价格表吧,价格表通过酒店ID和酒店表进行关联,价格表的设计如下
酒店ID
房间ID
价格
早餐类型
出售状态

那还是按具体的哪一天来存放记录?到后面数据量会很大的,还是说一开始的时候就创建分区表更好些? 

看了后面的讨论,知道你这个价格会有时修改的,但是又想把以前的记录保存,这样的话一年下来也没多少记录,如果你确实觉得不放心的话,可以按年分表存储。或者采用分区表