Схема SQL для ежедневных сводок - PullRequest
1 голос
/ 30 октября 2011

У меня есть база данных, в которой хранятся пинги из разных мест в следующем формате:

|    Date    | Source | Language |   OS   | Version | more...
| 2011-10-30 | App1   | en       | XP     | 1.0     | ...
| 2011-10-30 | App2   | de       | 10.7.1 | 1.3     | ...

Отлично работает для извлечения информации о снимке. Я хотел бы иметь возможность хранить ежедневные сводки, сгенерированные из приведенной выше таблицы, чтобы я мог получать графики того, как информация меняется со временем.

Примеры:

  • График, показывающий дату в зависимости от использования версии
  • График, показывающий дату в зависимости от версии ОС

Проблема в том, что несколько столбцов в таблице выше (язык, ОС, версия) могут иметь переменное число значений. У меня не было большого образования в области проектирования баз данных, и я не могу понять, как хранить эту информацию для удобного поиска.

Может ли кто-нибудь сделать какие-либо предложения?

Ответы [ 2 ]

1 голос
/ 30 октября 2011

Здесь используется база данных , нормализация . Убедитесь, что ваша БД находится в 3-NF .

Например, в вашем случае,

Создать таблицу OS_TYPE, сказать, что она имеет значения

* * 1010

и т.д ..

Если вам нужно вставить таблицу транзакций вместо вставки имени ОС, найдите таблицу и получите идентификатор, затем вставьте его вместе с другими данными. Сохраните исходную ссылку на ключ между таблицей OS_TYPE и таблицей DATA. Таким образом, для Win XP version-1 или Win XP Service Pack 2 у вас будет та же самая запись ID 1 в таблице DATA.

Таким образом, вы будете иметь согласованные данные, которые можно анализировать и обрабатывать. Когда у вас есть правильные данные, используйте для обработки данных операторы GROUP BY, ORDER BY и HAVING в SQL .

1 голос
/ 30 октября 2011

Вы можете легко получить эту статистику из текущей структуры таблицы.Ключевое слово SQL GROUP BY должно быть вашим другом.

Чтобы получить информацию об использовании версии на дату, введите

SELECT Date, Version, count(*) as NumberOfEntries
FROM YourTable
GROUP BY Date, Version
ORDER BY Date, Version

(ORDER BY Date, Version - это простохороший отсортированный вывод)

Если вы хотите иметь статистику по каждой комбинации источника и версии, измените вопрос на

SELECT Date, Source, Version, count(*) as NumberOfEntries
FROM YourTable
GROUP BY Date, Source, Version
ORDER BY Date, Source, Version

Если вы хотите получить версию ОС на дату, которую вы вводите

SELECT Date, OS, count(*) as NumberOfEntries
FROM YourTable
GROUP BY Date, OS
ORDER BY Date, OS

Если у вас нет огромных объемов данных (например, нескольких миллионов строк), у вас не возникнет проблем с производительностью при подходящих индексах.

...