Мы используем сторонний продукт для управления членством в спортивном центре. У нас есть несколько типов членства (например, младший, ученик, штат, сообщество) и несколько статусов членства (например, годовой, активный, неактивный, приостановленный). К сожалению, продукт регистрирует только текущий тип членства и статус участника. Я хотел бы отслеживать, как изменились тип и статус наших членов с течением времени.Дизайн базы данных для хранения информации человека, которая изменяется со временем?
В настоящее время мы имеем доступ к дизайну базы данных продукта. Он работает на SQL Server, и мы регулярно запускаем собственные SQL-запросы против таблиц продукта для создания собственных таблиц. Затем мы связываем наши таблицы с сводными таблицами в Excel для создания диаграмм. Поэтому мы знакомы с дизайном базы данных и SQL. Однако мы зацикливаемся на том, как наилучшим образом подойти к этой проблеме.
Продукт регистрирует членские взносы членов и их даты начала и окончания. Таким образом, мы можем восстановить данные, чтобы определить тип и статус участника в любой момент времени. Например, если они купили младшее членство на 1 января 2007 года, и оно истекло 31 декабря 2007 года, а затем они купили членство в университете 1 июня 2008 года, мы можем видеть, что их статус перешел от активного к неактивному активному (на Ян 1, 2008 и 1 июня 2008 года, соответственно), и их тип пошел от младшего к ученику (1 июня 2008 года).
По существу, мы хотели бы поменять тип элемента и его статус на temporal properties или effectivities a-la Fowler (или некоторые другие вещи, которые меняются со временем).
Наш вопрос (наконец :) - с учетом вышесказанного: какой дизайн таблицы таблиц базы данных вы бы рекомендовали использовать для хранения этой информации о членах. Я предполагаю, что у него будет столбец для MemberID, чтобы мы могли войти в существующую таблицу Member. Ему также необходимо будет сохранить статус и тип участника и диапазон дат, на который они были проведены. Мы хотели бы иметь возможность легко писать запросы против этой таблицы (таблиц), чтобы определить, сколько членов каждого типа и статуса у нас было в данный момент времени.
UPDATE 2009-08-25: Были сторонние пути и не имели возможности опробовать предлагаемые решения. Надеюсь сделать это в ближайшее время и выберем ответ на основе результатов.
Связанный вопрос о модели данных временных рядов: http://stackoverflow.com/questions/4083464/design-database-relating-to-time-attribute/ – Vadzim