我将如何建立停车场时间和相应停车费的数据模型?

Car*_*ter 4 database-design

假设停车场有以下时间和相关费用......

Mon-Fri 7am - 5pm parking is $5/2hrs 
Mon-Fri 5pm - 7am parking is $1/hr
Sat and Sun - 12am - 12pm parking is free
Run Code Online (Sandbox Code Playgroud)

您将如何对这些数据进行建模,以便我可以提出诸如“停车场 A 现在的成本是多少?”之类的问题。

我目前不确定,但似乎模型应该在一天中的某些时间容纳多个价格。例如...

Mon-Fri 7am - 5pm parking is $5/2hrs or $7/3hrs
Run Code Online (Sandbox Code Playgroud)

例如,如果很多成本发生变化,它也应该很容易修改。

这是我到目前为止的一般想法......

ParkingLot -
    ParkingLotId
    Name
    Address

ParkingLotSchedule -
    ParkingLotId
    DayOfTheWeek
    StartTime
    EndTime
    Cost
Run Code Online (Sandbox Code Playgroud)

然后我基本上可以编写一个查询,例如......

select cost from parkingLotSchedule where parkingLotId = currentLotId and dayOfTheWeek = today and currentTime between startTime and endTime 
Run Code Online (Sandbox Code Playgroud)

这并没有真正考虑到某些时间出现多个价格的可能性(当然我还不是 100% 确定这是必要的)。似乎一个批次可能有很多记录。

有一个更好的方法吗?如果是这样,模型会是什么样子?

Joe*_*own 5

根据您经营的停车场数量,我不会太担心您必须管理多少记录。这些数据不会快速变化,因为您可能需要打印标有价格等的标志。尽管如此,假设您有很多批次(其中许多具有相同的定价)并且您希望最大限度地减少数据维护,您可以构建一个价格表并将批次映射到该时间表。

考虑这样的事情:

ParkingLot -
    ParkingLotId
    Name
    Address

PriceSchedule -
    PriceScheduleId
    Description

PriceScheduleDetail - 
    PriceScheduleDetailId
    PriceScheduleId
    DayOfTheWeek
    StartTime
    EndTime
    DollarsPerUnit
    MinutesPerUnit
    MinutesMinimumStay

ParkingLotPrice -
    ParkingLotId
    PriceScheduleId
    EffectiveDate
    ExpiryDate
Run Code Online (Sandbox Code Playgroud)

请注意,该PriceScheduleDetail表允许您在一天中的给定时间范围内保留价格的两个或多个版本。

另请注意,该ParkingLotPrice表使用有效日期和到期日期将停车场按日期范围链接到价格表。这允许您提前设置价格变化,这样您就无需在价格变化生效时的半夜加载新数据。

您的定价查询将不得不根据最短停留时间找到适用的价格版本,这比“现在的价格是多少?”要复杂得多。因为这将取决于停留多长时间以及客户有资格获得的最优惠价格。此外,客户支付的价格将取决于他们逗留的时间长短,并且可能跨越一个或多个价格点界限。