动态定价和许多变量的数据库架构-预订系统

时间:2019-01-25 16:18:22

标签: php mysql

我遇到了以下问题: 对于我的预订系统,我想在夜间保存所有可能组合的价格,因此不必即时计算它们。 我选择此解决方案以提高性能,并选择这些价格每天晚上仅更改一次。 我的第一个尝试是将所有可能的组合保存到数据库中。 但是我很快发现这并不有效。

预订的范围从1位成人到9位成人和9位儿童,每个孩子的年龄在0到17岁之间。

当用户搜索1位成人时,我需要能够返回价格,并且当用户搜索2位成人和3位年龄分别为2、10和15岁的孩子时,我也需要能够返回价格。

这是我的第一种方法,不考虑孩子的年龄:

//Amount adults
        for($a = 1; $a <= static::MAX_ADULTS; $a++) {
            //Amount children
            for($c = 0; $c <= static::MAX_CHILDREN; $c++) {
                $cheapestPriceObj = null;
                //Add 1 day to arrival per iteration
                    for($i = 0; $i < $dDiff->days; $i++) {
                        $arrival = strtotime(" + $i days",$this->_arrival);
                        $travelCompany = array(array('amount_adults' => $a, 'amount_children' => $c));
                        $priceInfo = $this->_curAcco->getListerPriceInfo($arrival, static::DEFAULT_DURATION,$travelCompany);
                        if($priceInfo) {
                            if(is_null($cheapestPriceObj)) {
                                $cheapestPriceObj = $priceInfo;
                            } else if($priceInfo['price'] < $cheapestPriceObj['price']) {
                                $cheapestPriceObj = $priceInfo;
                            }
                        }   
                    }
                    //Save cheapest price and date for travelcompany
                    if($cheapestPriceObj && $cheapestPriceObj['price'] > 0) {
                        $default = new AccommodationRoomDefaultPrice;
                        $default->fkItemRoom = $cheapestPriceObj['rooms'][0]['itemRoom'];
                        $default->arrival_date = $cheapestPriceObj['arrival_date'];
                        $default->duration = $cheapestPriceObj['duration'];
                        $default->amount_adults = $a;
                        $default->amount_children = $c;
                        $default->price = $cheapestPriceObj['price'];
                        $default->save();
                    }
            }
        }

数据库架构如下:

id-fkItemRoom-arrival_date-duration-amount_adults-amount_children-price

但这错过了“年龄”部分。价格也取决于年龄。

如何解决此问题?我不仅在寻找“答案”。我想对自己进行一般的大数据挑战教育。

0 个答案:

没有答案