0

У меня есть таблица базы данных, в которой хранятся ученики в школе и их атлетическое представление. Таким образом, каждый ребенок будет иметь конкурентный статус (Youth, U15 и Open) вместе со своими записями для определенных событий (прыжок в длину, прыжок в высоту и 100 метров).Дизайн базы данных, чтобы сохранить историю изменений?

Я хотел бы вывести отчет для конкретного ребенка с указанием временной шкалы ребенка, движение от молодежи -> U15 до Open. А также различные записи (личные лучшие) на время обучения ученика в школе.

Однако таблица базы данных хранит текущий статус ребенка, а также их текущие личные качества.

Как мы можем структурировать базу данных так, чтобы была записана история ребенка?

+1

Вместо обновления записи в таблице у вас есть - вставьте новую и отметьте ее как последнюю. Это самое быстрое решение и не сильно меняет дизайн (только 1 столбец дополнительно). –

ответ

1

Я бы добавил две колонки, START_DATE и END_DATE. Самая последняя запись будет иметь конечную дату бесконечности «31-Dec-9999» (или какая бы максимальная дата в mysql). Вставка новой строки действительно становится немного вовлечен хотя:

  • Если нет строки для человека, вставить новую запись, где START_DATE текущая дата и END_DATE бесконечность.
  • Если строка уже существует, «завершите» текущую запись, установив END_DATE на текущую дату и вставьте новую запись, где START_DATE - текущая дата, а END_DATE - бесконечность.

Таким образом, вы могли бы:

PUPIL, STATUS, LONG_JUMP, START_DATE, END_DATE 
Mike, Open, 2 meters, 01-Jan-2012, 31-Dec-9999 
Mike, U15, 2 meters, 01-Jan-2011, 01-Jan-2012 

Майк был в U15 для всех 2011 года, и в настоящее время Open по состоянию на январь 2012 года

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

0

Вы также можете добавить триггер в свой стол. a перед триггером обновления.

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