是的,有更好的策略。它被称为维度建模或星型模式。
您存储一个名为Fact Table的表,其中包含 Campaign、Medium 和 Supermarket 列。
对于这些属性中的每一个,事实表中的列是维度表的外键。广告系列、媒介和超市各有一个维度表。
在您的情况下,为了避免数百万行,您可以在事实表中添加第四列,conversions
. 当您获得转化时增加计数(而不是添加另一行)。
这是一个示例表:
CREATE TABLE FactTable (
campaign_id INT,
medium_id INT,
supermarket_id INT,
conversions INT,
PRIMARY KEY (campaign_id, medium_id, supermarket_id),
FOREIGN KEY (campaign_id) REFERENCES Campaigns(campaign_id),
FOREIGN KEY (medium_id) REFERENCES Mediums(medium_id),
FOREIGN KEY (supermarket_id) REFERENCES Supermarkets(supermarket_id)
);
然后您可以查询所有转换:
烤豆。
SELECT SUM(conversions) FROM FactTable
JOIN Campaigns USING (campaign_id)
WHERE campaign = 'Baked Beans';
来自 Facebook 页面的烤豆。
SELECT SUM(conversions) FROM FactTable
JOIN Campaigns USING (campaign_id)
JOIN Mediums USING (medium_id)
WHERE campaign = 'Baked Beans' AND medium = 'Facebook';
适用于超市沃尔玛,但适用于所有广告系列和媒体。
SELECT SUM(conversions) FROM FactTable
JOIN Supermarkets USING (supermarket_id)
WHERE supermarket = 'Walmart';
适用于从 Facebook 页面制作的沃尔玛,但适用于所有广告系列。
SELECT SUM(conversions) FROM FactTable
JOIN Mediums USING (medium_id)
JOIN Supermarkets USING (supermarket_id)
WHERE medium = 'Facebook' AND supermarket = 'Walmart';
用于通过 Flash 横幅广告制作的番茄酱和用于 Safeway。
SELECT SUM(conversions) FROM FactTable
JOIN Campaigns USING (campaign_id)
JOIN Mediums USING (medium_id)
JOIN Supermarkets USING (supermarket_id)
WHERE campaign = 'Ketchup' AND medium = 'Flash Banner Ad' AND supermarket = 'Safeway';
查看Ralph Kimball的书籍,了解有关维度建模的更多信息。