Структура базы данных за промежуток времени - PullRequest
0 голосов
/ 05 августа 2011

У меня есть народы, у всех есть: имя, фамилия. И у всех есть параметры: [количество автомобилей, количество денег, количество коров ...] Иногда эти параметры меняются. Я хочу иметь прошлые счетчики параметров и текущие счетчики параметров для статистики. Как я должен построить свою структуру БД?

Моя версия:

  • [PeopleID (PK): Фамилия, Имя]
  • [СhangesID (PK): PeopleID (FK), ChangesDate]
  • [ParameterID (PK), changesID (FK), DayOfBirth, CarCount, Adress, MoneyCount, CowCount ...]

1 Ответ

1 голос
/ 05 августа 2011

Это своего рода шаблон журнала истории.

[PeopleID (PK): Фамилия, Имя, День рождения, Адрес, CarCount, MoneyCount, CowCount ...] [ChangesID (PK): PeopleID (FK), ColumnId, OldValue, ChangesDate]

ColumnId будет вашим собственным определением, например, ColumnId = 1 для CarCount, ColumnId = 2 для MoneyCount, ColumnId = 3 для CowCount

Моя идея заключается в том, что для людей вы не должны создавать таблицу только с людьми. Имя, фамилия, DayOfBirth и другие также должны быть включены в эту таблицу (люди). А для параметров CarCount, MoneyCount или CowCount всегда будут хранить текущее значение. В любое время происходит изменение CarCount с a на b, затем обновляйте соответствующую строку в таблице People, устанавливайте CarCount на b и создавайте новую запись в таблице Changes, в которой ColumnId = 1 и OldValue = a. Аналогично для других параметров.

Таким образом, вы всегда можете быстро получить новейший параметр для каждого человека, используя информацию в таблице Люди. А в случае, если пользователь хочет знать предыдущие значения для каждого параметра, это можно сделать, запросив порядок таблицы изменений по убыванию ChangesDate.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...