Я прочитал несколько вопросов по 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
Я не уверен, как связать таблицу аудита с любыми другими таблицами (например, Person), если TableName является строкой?
Кроме того, если у меня есть три графических интерфейса для заполнения:
- Полная запись для идентификатора конкретного человека
- Табличное представление со списком всех лиц (по идентификатору)
- Представление, показывающее каждого человека с информацией о его ревизии под каждой записью (количество ревизий на человека, даты ревизий, комментарии к ревизиям и т. Д.), Упорядоченные по самым последним ревизиям.
Чтобы выполнить 1 и 2, что лучше: запросить таблицу Person или таблицу аудита?
Чтобы выполнить 3, мог бы так называемый эксперт по базам данных просто получить все записи и передать их программному обеспечению для обработки или сгруппировать их по идентификатору пользователя и дате воздействия? Обычно это обрабатывается одним или несколькими запросами?