Я создаю приложение Analytics, где мы отслеживаем конверсии для кампаний маркетинга компаний. Конвертация - если они идут в супермаркет и покупают продукт. Если компания Heinz, они могут работать кампании для различных продуктов, поэтому кампании могут быть:Подходящий дизайн модели данных (RDBMS) для множественных перестановок данных
- Запеченная фасоль
- Томатный суп
- Кетчуп
Это онлайн кампании, чтобы они могли различные медиумы, такие как:
- Сайт
- Facebook страницу
- Flash Banner Ad
- Mobile App Ad
И если кто-то покупает продукт, он купил через супермаркет, такие как:
- Walmart
- Asda
- Safeway
- Kroger
И мы отслеживаем конверсии для всех этих. Приложение аналитики должно отображать данные конверсий для любой комбинации вышеперечисленного. Так, например, мне может потребоваться показать конверсии ...
- для запеченных боб.
- для запеченных бобы со страницы Facebook.
- для супермаркета Walmart, но для всех Кампании & Средние.
- для Walmart со страницы Facebook, но для всех кампаний.
- для кетчупа, сделанного с помощью рекламного баннера Flash и для Safeway.
Чтобы быстро сделать аналитику, мы избегаем обработки необработанных данных (миллионы записей), но сохраняем агрегированную версию данных, хранящихся в день. Итак, в течение 12 сентября я могу записать, что у нас было 12 конверсий для Baked Beans, 6 конверсий (для всех продуктов) были сделаны через веб-сайт, а Walmart - 8 конверсий, и они могут быть в 3 отдельных таблицах (так называемые Кампании, Средних и супермаркетов). Но если мне нужно знать конверсии для кетчупа, сделанные через страницу Facebook, а для Walmart, то хранение в отдельных таблицах очевидно не будет работать.
Я изо всех сил пытаюсь найти модель данных, которая может поддерживать вышеупомянутое. Я использую стандартную реляционную базу данных (MySQL). Возможно, есть лучшая стратегия для решения этой проблемы.
Легко в Top 5 лучших ответов Stackoverflow, которые у меня когда-либо были! Большое спасибо :-) –
Не только хороший ответ, но и очень хорошо сформулированный. Я бы добавил, что во многих случаях клиентское приложение имеет целочисленный id (или какой-то uuid для публичного api), встроенный в элемент управления, который отображает имена. Таким образом, нет необходимости в соединениях ... только условие WHERE, определяющее идентификаторы (id). Даже быстрее. – NaturalData
@NaturalData, да, это хорошая оптимизация, я показывал объединения, потому что это очень хорошо иллюстрирует роль таблиц измерения. –