Моим упрощенным и надуманным примером является следующее: -
Предположим, что я хочу ежедневно измерять и сохранять температуру (и другие значения) всех городов мира. Я ищу оптимальный способ хранения данных, так что так же легко получить текущую температуру во всех городах, так как это исторически историческая температура в одном городе.
Это довольно простая проблема для решения, но я ищу лучшее решение.
2 основных варианта, о которых я могу думать, следующие: -
Вариант 1 - В той же таблице хранятся текущие и исторические записи
Сохраните все текущие и архивные записи в одной таблице.
то есть.
CREATE TABLE [dbo].[WeatherMeasurement](
MeasurementID [int] Identity(1,1) NOT Null,
TownID [int] Not Null,
Temp [int] NOT Null,
Date [datetime] NOT Null,
)
Это будет держать все просто, но что будет самым эффективным запросом для получения списка городов и текущей температуры? Будет ли эта шкала после того, как таблица будет иметь миллионы строк? Есть ли что-нибудь, что можно получить, если в таблице есть какой-то флаг IsCurrent?
Вариант 2 - Хранить все архивные записи в отдельной таблице
Там будет таблица для хранения текущих текущих измерений в
CREATE TABLE [dbo].[WeatherMeasurement](
MeasurementID [int] Identity(1,1) NOT Null,
TownID [int] Not Null,
Temp [int] NOT Null,
Date [datetime] NOT Null,
)
И таблица для хранения исторической архивной даты (возможно, вставлена с помощью триггера)
CREATE TABLE [dbo].[WeatherMeasurementHistory](
MeasurementID [int] Identity(1,1) NOT Null,
TownID [int] Not Null,
Temp [int] NOT Null,
Date [datetime] NOT Null,
)
Это имеет преимущество, заключающееся в том, что основные текущие данные бывают скудными и очень эффективными для запроса, за счет того, что схема становится более сложной и вставлять данные дороже.
Какой из лучших вариантов? Есть ли лучшие варианты, о которых я не упоминал?
ПРИМЕЧАНИЕ. Я упростил схему, чтобы лучше сфокусировать мой вопрос, но предположим, что в день будет много вставленных данных (100 000 записей), а данные будут текущими в течение одного дня. Текущие данные также могут быть запрошены как исторические.