2010-10-06 3 views
3

что лучше практики ?:Каковы плюсы и минусы наличия таблиц истории?

  1. Хранить историю записи в отдельной таблице истории

  2. Хранить историю записей в активной таблице с различным статусом?

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

ответ

2

Мое предпочтение всегда заключалось в том, чтобы иметь отдельную таблицу с историей, только потому, что она устраняет необходимость иметь «WHERE Status =« LIVE »или« WHERE CurrentRecord = 1 »для получения последней записи (я не буду войдите в один проект, который требует встроенного запроса, чтобы получить максимальную (версию), чтобы получить последнюю). Это должно означать, что таблица текущих записей должна оставаться меньше, а время доступа может быть улучшено и т. Д. В худшем случае я видел, что запрос ad-hoc к таблице поднимает неправильную версию записи, вызывая все виды проблем позже.

Кроме того, если вы уже получаете историю из другой таблицы, вы можете очертить данные, поэтому вся история с одного года находится в одной таблице/db, а вся история из другой - в другой таблице/db и т. Д.

0

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

1

Pro:
Если сохранить историю в отдельной таблице, то эти данные будут доступны только тогда, когда вам нужно искать что-то из прошлого. В большинстве случаев основной стол будет использоваться гораздо больше, чем исторический. Таким образом, это означает более быстрые результаты.
Con:
В проекте я работал, у меня был один стол с 350 колонками (не спрашивайте, почему .....). Таким образом, эта таблица стала очень большой, поскольку данные были введены. В определенный момент записи перешли с «активного» на «закрытый». У меня возникло соблазн переместить все закрытые записи на новый стол (исторический), но я понял, что это было медленнее - во многих запросах мне пришлось создавать союзы.

В заключение Я думаю, это зависит от каждого случая, но я всегда буду думать сначала о отдельной таблице.

+0

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

1

Я предпочитаю использовать один стол и партион. Я также создавал представление для активных записей и использовал бы это вместо базовой таблицы при запросе активных записей.

+0

Как вы устанавливаете, что VIN или SSN уникальны? Как вы убедитесь, что текущие строки не являются сиротами, но история может быть сиротами? –

+0

Я бы никогда не позволял строкам истории быть сиротами. Если вам нужно обеспечить уникальность только активных записей, это должно быть сделано в триггере. – HLGEM

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