Я прочитал несколько вопросов о SO (например, этот) в отношении версий ваших данных в базе данных.
Мне понравились некоторые из упомянутых предложений. Я долгое время хотел (необходимости) пересмотреть многие мои таблицы, но так и не добрался до него. Будучи программистом с простой работой с базой данных под моим поясом, мне было интересно, как это вообще можно было бы сделать.
Я не запрашиваю фактическое решение в синтаксисе SQL. В конце концов я смогу понять это для себя (или опубликую СО, когда придет время). Я просто прошу людей прокомментировать, как они это сделают, и любые потенциальные проблемы с производительностью, которые могут возникнуть, если я буду "пересматривать" сотни миллионов записей. Или любые другие предложения, если они основаны на приведенном ниже примере.
Учитывая простой пример:
Person
------------------------------------------------
ID UINT NOT NULL,
PersonID UINT NOT NULL,
Name VARCHAR(200) NOT NULL,
DOB DATE NOT NULL,
Email VARCHAR(100) NOT NULL
Audit
------------------------------------------------
ID UINT NOT NULL,
UserID UINT NOT NULL, -- Who
TableName VARCHAR(50) NOT NULL, -- What
OldRecID UINT NOT NULL, -- Where
NewRecID UINT NOT NULL,
AffectedOn DATE NOT NULL, -- When
Comment VARCHAR(500) NOT NULL -- Why
Я не уверен, как связать таблицу Audit с любыми другими таблицами (например, Person), если TableName является строкой?
Кроме того, предполагая, что у меня есть три GUI для заполнения:
- Полная запись для идентификатора конкретного человека
- В виде таблицы перечислены все лица (по id)
- Вид, показывающий каждого человека с информацией о его пересмотре ниже каждой записи (# ревизий на человека, даты пересмотров, комментарии к пересмотру и т.д.), упорядоченные по последним версиям.
Чтобы выполнить 1 и 2, было бы лучше запросить таблицу Person или таблицу аудита?
Чтобы выполнить 3, может ли так называемый эксперт базы данных просто получить все записи и передать их на программное обеспечение для обработки или группу по идентификатору PersonID и Affected date? Обычно ли это обрабатывается одним запросом или многими?