Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对于重叠规则(如价格变化),建议使用什么样的数据库模式?_Sql_Database_Database Design - Fatal编程技术网

Sql 对于重叠规则(如价格变化),建议使用什么样的数据库模式?

Sql 对于重叠规则(如价格变化),建议使用什么样的数据库模式?,sql,database,database-design,Sql,Database,Database Design,设想一下管理酒店房间价格的规则 一般来说,每晚100美元 星期五或星期六120美元 夏季月份150美元 下周的特价80美元 等等 如果有一个酒店房间的数据库,有这样不同的规则,你会如何在数据库中对此进行建模,以便在给定的时间快速方便地修改和查询价格?我想有多种方法可以做到这一点,但我最熟悉的是在表中存储属性'datefrom'和'dateto',以及相应的持续时间价格。然后,在查询时,可以在where子句中指定sysdate(或任何其他所需的日期),以检索正确的价格 或者,如果您对酒店的所有房间

设想一下管理酒店房间价格的规则

  • 一般来说,每晚100美元
  • 星期五或星期六120美元
  • 夏季月份150美元
  • 下周的特价80美元
  • 等等

  • 如果有一个酒店房间的数据库,有这样不同的规则,你会如何在数据库中对此进行建模,以便在给定的时间快速方便地修改和查询价格?

    我想有多种方法可以做到这一点,但我最熟悉的是在表中存储属性'datefrom'和'dateto',以及相应的持续时间价格。然后,在查询时,可以在where子句中指定sysdate(或任何其他所需的日期),以检索正确的价格

    或者,如果您对酒店的所有房间都有相同的规则,您可以创建一个包含这些规则的单独表(日期从、日期到、价格(或价格变化百分比))。这将是一种更加规范化的方式,但这意味着您对所有房间都有相同的规则


    实际上,这完全取决于业务规则是什么。

    您需要定义优先级顺序。然后存储每个规则及其优先级和条件(例如从-到+工作日位图),然后找到具有最高优先级的匹配规则。

    并且不要忘记您需要某种优先级,例如“如果是星期五、夏季和特殊的一周,那么价格是多少?”?我也在考虑类似的设置,但我在想象“永远周六150美元”与“下周80美元特价”的重叠规则。直觉上,当你查询这个时间段时,你想要80美元,但是这个时间段变得模棱两可precedence@Jim,系统无法猜测优先级,因此您必须将其包含在规则中,无论是谁设定价格,都必须明确定义优先级。唯一的另一种选择是使用CSS自动优先权(基于规则的“具体”程度),但我们都知道这并不总是像人们想象的那样直观。@Jim Yeah,您还需要存储排序的优先级标志来指示优先权。然后在查询时,选择具有最小(或最大)优先级的。