我们正在开发广告调度系统。现在,我们想要为此计算奖品细节。现在,数据库就像,我们有2个表城市和时段。 city包含3000多万条记录,daypart包含6条记录,如早上6点到晚上10点。现在我们要计算广告奖。即如果有任何用户向孟买市提供了3个小时的广告,那么如何计算奖金。一种方法是创建一个表,并保留城市和时段及其奖品的所有组合。但是这个表包含60多万条记录,如果添加了新的时段,那么我们必须再次更新这个表,这更有问题。 恩。 city包含1条记录,daypart包含6条记录,然后新表包含总共6条记录及其奖励。 有没有其他方法来计算上述情景的奖金?
答案 0 :(得分:0)
正如您所提到的,奖金额可能因城市或时段而有所不同,并且听起来并不像根据城市和时段计算奖品的任何标准算法或计算(奖金金额似乎是您系统的专有信息) ) - 所以某种查找表可能是你最好的选择。
我想你的表格列看起来像这样:
Countries: id (integer, non-null), countryName
Cities: id (integer, non-null), cityName, countryId
Prizes: cityId, startHour, amountPerHour
一些注意事项:
不是将'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
如果这不符合您的需求,另一种选择(如您所述)只是一个直接查找表,在这种情况下,您将拥有一个时段表,并且奖品表将变为cityId | daypartId | amount
如果您担心性能,那么表的大小并不是那么糟糕 - 特别是如果您正确使用主键列并具有表索引。