Sql 对于重叠规则(如价格变化),建议使用什么样的数据库模式?
设想一下管理酒店房间价格的规则Sql 对于重叠规则(如价格变化),建议使用什么样的数据库模式?,sql,database,database-design,Sql,Database,Database Design,设想一下管理酒店房间价格的规则 一般来说,每晚100美元 星期五或星期六120美元 夏季月份150美元 下周的特价80美元 等等 如果有一个酒店房间的数据库,有这样不同的规则,你会如何在数据库中对此进行建模,以便在给定的时间快速方便地修改和查询价格?我想有多种方法可以做到这一点,但我最熟悉的是在表中存储属性'datefrom'和'dateto',以及相应的持续时间价格。然后,在查询时,可以在where子句中指定sysdate(或任何其他所需的日期),以检索正确的价格 或者,如果您对酒店的所有房间
如果有一个酒店房间的数据库,有这样不同的规则,你会如何在数据库中对此进行建模,以便在给定的时间快速方便地修改和查询价格?我想有多种方法可以做到这一点,但我最熟悉的是在表中存储属性'datefrom'和'dateto',以及相应的持续时间价格。然后,在查询时,可以在where子句中指定sysdate(或任何其他所需的日期),以检索正确的价格 或者,如果您对酒店的所有房间都有相同的规则,您可以创建一个包含这些规则的单独表(日期从、日期到、价格(或价格变化百分比))。这将是一种更加规范化的方式,但这意味着您对所有房间都有相同的规则
实际上,这完全取决于业务规则是什么。您需要定义优先级顺序。然后存储每个规则及其优先级和条件(例如从-到+工作日位图),然后找到具有最高优先级的匹配规则。并且不要忘记您需要某种优先级,例如“如果是星期五、夏季和特殊的一周,那么价格是多少?”?我也在考虑类似的设置,但我在想象“永远周六150美元”与“下周80美元特价”的重叠规则。直觉上,当你查询这个时间段时,你想要80美元,但是这个时间段变得模棱两可precedence@Jim,系统无法猜测优先级,因此您必须将其包含在规则中,无论是谁设定价格,都必须明确定义优先级。唯一的另一种选择是使用CSS自动优先权(基于规则的“具体”程度),但我们都知道这并不总是像人们想象的那样直观。@Jim Yeah,您还需要存储排序的优先级标志来指示优先权。然后在查询时,选择具有最小(或最大)优先级的。