Database 计算机现场数据库设计

Database 计算机现场数据库设计,database,database-design,Database,Database Design,我需要关于为以下数据设计数据库/表的最佳方法的帮助 我有一个供应商:为一个项目提供各种产品 对于他们提供的每种产品。费率的变化取决于一周中的哪一天、一天中的时间以及是公共假日还是周末 有什么想法吗 例如: Week Day Rates | Saturday/Sunday & Public Holiday Rates Start Time 0:00 3:00 6:00 17:00

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

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

对于他们提供的每种产品。费率的变化取决于一周中的哪一天、一天中的时间以及是公共假日还是周末

有什么想法吗

例如:

                    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   

在最大限度地减少数据量以维护和保持灵活性的同时,最好的管理方法是使用日期/时间范围。对于假日费率,您可以保留两个费率列(常规/假日),也可以保留单独的记录,其中带有一个标志,指示价格是针对常规日期还是假日

您可以选择如何表示此信息。您可以使用调整为任意起始日期的日期时间列来表示它。这在列方面很简单,但使用起来可能会混淆。另一种方法是使用两列:Day_of_Week(极小的int)和Time(datetime,不带日期或时间,如果DBMS支持的话)

我推荐第二种选择。因此,您的桌子可以如下所示:

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

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

以下是一篇关于我如何操作的天真文章:

ProductId(int)开始时间(time)结束时间(time)价格(十进制/货币)IsHolidayPrice(布尔值)

我没有为价格行添加id,因为我猜您永远不会使用它。
您总是通过查询访问价格,在查询中指定过滤器:ProductId、购买时间以及当天是否为假日。

这是家庭作业吗?到目前为止,您创建了什么样的模式,哪些是有效的,哪些是无效的?到目前为止,你做了些什么?不,这不是家庭作业,它是我正在从事的一个更大项目的一部分,我确信这一点可以通过多种方式完成,我只是不确定哪种方式可以在存储/报告方面给我最大的灵活性,我的想法与@Joel brown下面提到的类似,唯一的区别是,我有额外的字段作为一天的类型,我有单一字段的价格,但我认为乔尔·布朗比我的好让我们看看还有什么其他想法。