2008-10-29 4 views
0

У меня есть таблица с тремя столбцами:данных в Sql Server

пользователя VARCHAR, статус VARCHAR, представитель Int

статус и репутация получают часто и один из требований является обновление:

Данные о состоянии и значениях представления значения даты и времени для каждого пользователя в заданную дату.

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

Какое наилучшее решение этой проблемы в SQL Server?

ответ

1

В зависимости от того, как вы собираетесь использовать отчетную информацию, лучше всего создать таблицу «История», которая перед обновлением основной таблицы записывает текущие значения в таблицу «История», добавляя метку времени.

Это было бы лучше всего, если вы на самом деле только выбирая определенные дни/пользователей/статусы из истории

0

Я бы хранить это отдельная связанную таблица, так как я предполагаю, что большую часть времени вы собираетесь запрашивать только текущий статус при вступлении. Если вы будете делать много такого типа запросов и добавляете этот тип данных во многие таблицы, а не только из этого, я бы создал отдельную базу данных OLAP для отчетности.

Кстати, если вы делаете это, вы можете подумать, хотите ли вы записать, кто внес изменения. Тогда вы в основном создали решение для аудита.

0

Одним из вариантов для этого было бы использовать две отдельные таблицы: таблицу «текущие значения» и таблицу истории. Текущая таблица значений будет содержать только последние значения для каждого пользователя, что будет держать ее маленькой и легко объединяемой. Таблица истории будет содержать три столбца, которые вы указали, а также столбец timestamp, и будет отслеживать изменения значений со временем. В любое время, когда вы хотели изменить значение в текущей таблице значений, вы одновременно добавляли строку с новыми значениями в таблицу истории, используя gettime() в качестве метки времени.

Смежные вопросы