MySQL DB Schema用于记录PPC ADs性能,日常

时间:2011-06-03 17:08:22

标签: mysql database database-design reporting

我正在努力完成网站广告系统的重建。新PPC模型的报告/记录结束提供了一些困难,我发现自己迷失了更好的想法。相关表格将被称为“报告”,其中包含系统中每个广告的ad_id,展示次数,点击次数和点击率,每天滚动一年。

简单的解决方案如下所示

CREATE TABLE IF NOT EXISTS `reports` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ad_id` int(11) NOT NULL,
  `impressions` int(11) NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `ctr` float(6,3) NOT NULL DEFAULT '0.000',
  `report_date` date NOT NULL,
  PRIMARY KEY (`id`)
)

当你看一周中的日子时会出现问题。我希望能够为每个广告客户收集数字并逐日显示报告。我们将有多个广告客户,每个广告客户都有多个广告。最明显(和荒谬)的选择是为一年中的每一天建立一个表格。

如果我使用“report_date”列,我的报告表最终会变成一团糟。在此实例中控制此数据的更新将包括以下内容:

if there is no record for today - INSERT new record
else UPDATE existing record for today

我在每次点击时使用PHP计算更新此记录。但明年,继续相同的过程?我想这会有用,但我想知道是否有更好的方法来做到这一点。我宁愿滚动完成一年 - 在没有广告的情况下填充零天。使用此系统的客户将可以随时重新填写其银行并重新启用旧广告,这些广告永远不会从系统中删除。这是滚动年模式背后的原因。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

听起来你需要一个数据集市。在交易系统中存储历史信息会让您一直感到头疼。查询/更新事务系统中的行将非常慢。我的建议是将表格减去report_Date。

我的推荐是维度模型而不是关系型。创建用于报告的数据库,并在此数据库中使用如下所示的快照事实。听起来会有一些其他有趣的方面。这将允许用户按网址或日期查看点击次数/ ctr。您进入巨型事实是基于优化的索引键。 Google维度建模以获取更多信息。结合历史/报告/交易通常会导致糟糕的设计。如果您需要任何有关如何填充该评论的帮助。 dimensional add model