广告计划奖金计算

时间:2012-11-21 06:04:34

标签: java mysql

我们正在开发广告调度系统。现在,我们想要为此计算奖品细节。现在,数据库就像,我们有2个表城市和时段。 city包含3000多万条记录,daypart包含6条记录,如早上6点到晚上10点。现在我们要计算广告奖。即如果有任何用户向孟买市提供了3个小时的广告,那么如何计算奖金。一种方法是创建一个表,并保留城市和时段及其奖品的所有组合。但是这个表包含60多万条记录,如果添加了新的时段,那么我们必须再次更新这个表,这更有问题。     恩。 city包含1条记录,daypart包含6条记录,然后新表包含总共6条记录及其奖励。 有没有其他方法来计算上述情景的奖金?

1 个答案:

答案 0 :(得分:0)

正如您所提到的,奖金额可能因城市或时段而有所不同,并且听起来并不像根据城市和时段计算奖品的任何标准算法或计算(奖金金额似乎是您系统的专有信息) ) - 所以某种查找表可能是你最好的选择。

我想你的表格列看起来像这样:

Countries: id (integer, non-null), countryName
Cities:    id (integer, non-null), cityName,   countryId
Prizes:    cityId, startHour, amountPerHour

一些注意事项:

  • 城市和国家根据您的3000多万城市记录的信息分成多个表格。
  • 不是将'dayparts'存储为时间范围(下午3点至下午6点),而是将其作为每小时在特定时间开始的价格存储在查找表中。例如:

    • 如果CityA(id = 1)上午6点到9点花费15美元,上午9点到下午12点花费30美元(为简单起见则为0),那么此表格将包含以下条目:

      cityId    startHour    amountPerHour
       1         0            0
       1         6            5
       1         9            10
       1         12           0
      
    • 这使您可以灵活地轻松添加新的时段(您的一个问题),甚至每个城市都有不同的时段。 StartHour代表一天内的startHour(0-23),如有必要,甚至可以是十进制值(12点30分为12.5)。
    • 计算一个时间范围只需要确定你的范围内有多少个startHours,然后用amountPerHour做一些基本的数学运算。

如果这不符合您的需求,另一种选择(如您所述)只是一个直接查找表,在这种情况下,您将拥有一个时段表,并且奖品表将变为cityId | daypartId | amount

如果您担心性能,那么表的大小并不是那么糟糕 - 特别是如果您正确使用主键列并具有表索引。