2013-03-25 4 views
0

Я тихо новый в поле SQL. Таким образом, у меня есть рабочий вопрос.Хранилище MySQL: лучший способ архивирования данных

Каждую неделю я буду отправлять данные из электронной таблицы Excel в моей базе данных MySQL через код pHp. Это уже работает. Таким образом, у меня есть таблица, которую я могу обновить.

Фактически я отправляю цену конкретного базового блока на свою БД. Каков наилучший способ архивирования моих данных следующим образом.

На моей БД, У меня есть ниже структуру:

tabe t_index 
Label = VARCHAR(255) 
Price = float 
Date = date() 

Скажем, я послал мои данные на моем дб на прошлой неделе, таким образом, я сохранил:

Stock A 
102.85 
2013-03-18 

Сегодня я хочу отправить новая цена для того же Stock A, который составляет 103.54, но я хотел был бы архивировать и держать цену 102.85, чтобы иметь возможность вернуть или что-то другое между этими двумя ценами.

Как я могу продолжить?

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

ответ

4

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

CREATE TABLE t_index_archive (
Label VARCHAR(255), 
Price float, 
Date datetime); 

Теперь создать триггер на существующей таблице

DROP TRIGGER IF EXISTS archive_t_index; 
DELIMITER $$ 
CREATE DEFINER = CURRENT_USER TRIGGER archive_t_index BEFORE UPDATE ON t_index 
    FOR EACH ROW BEGIN 
      INSERT INTO t_index_archive VALUES (OLD.Label, OLD.Price, OLD.Date); 
    END; 
$$ 
DELIMITER ; 
+0

мы не можем сделать это в той же таблице, добавив один cloumn флаг? – Hardik

+0

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

0

Вы можете добавить еще один столбец с именем, как is_active типа ENUM со значением active,inactive

По умолчанию значение is_active «s будет 'active'

и когда вы вводите новую запись в базу данных, просто обновите старую запись is_active с 'inactive', а затем добавить новую запись

Fetch новые данные, используя запрос, используя, где положение WHERE is_active='active'

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