复合场数据库设计

时间:2012-03-20 12:51:09

标签: database database-design

我需要有关为以下数据设计数据库/表的最佳方法的帮助。

我有供应商:为项目提供各种产品。

对于他们提供的每种产品。价格根据星期几,一天中的时间以及公共假日或周末而变化。

任何想法???

示例:

                    Week Day Rates        | Saturday/Sunday & Public Holiday Rates                  
Start Time  0:00    3:00    6:00    17:00 | 0:00    3:00    6:00    17:00   20:00   
End Time    3:00    6:00    17:00   20:00 | 3:00    6:00    17:00   20:00   23:59

Product 1   1.00    2.00    3.00    4.00  | 6.00    7.00    8.00    9.00    10.00   
Product 2   5.00    8.00    8.00    9.00  | 2.00    6.00    7.00    8.00    9.00    
Product 3   3.00    2.00    3.00    5.00  | 3.00    4.00    5.00    8.00    10.00   

2 个答案:

答案 0 :(得分:1)

管理此问题的最佳方法是尽量减少要维护的数据量并保持灵活性,这是使用日期/时间范围。对于假期费率,您可以保留两个费率列(常规/假期),也可以保留单独的记录,并带有一个标记,指示价格是针对常规日还是假日。

您可以选择如何表示此信息。您可以使用调整到某个任意开始日期的日期时间列来表示它。就列而言,这将是简单的,但使用起来可能会令人困惑。另一种方法是使用两列:Day_of_Week(tiny int)和Time(仅限日期或时间,如果您的DBMS支持它)。

我建议第二个选项。所以你的桌子看起来像这样:

PRICE (
  id            int identity
, product_id    int
, day_of_week   int
, start_time    time
, end_time      time
, regular_price money
, holiday_price money
)

当然,您需要添加主键和外键约束......

答案 1 :(得分:0)

这是一篇关于我如何做的天真写作:

ProductId(int)StartTime(时间)EndTime(时间)价格(decimal / money)IsHolidayPrice(boolean)

我没有为价格行添加ID,因为我猜你永远不会使用它。 您始终可以通过指定过滤器的查询来访问价格:ProductId,购买小时以及是否是假日。