Дизайн базы данных для ревизий?

  1. Делать не помещать все это в одну таблицу с атрибутом дискриминатора IsCurrent. Это просто вызывает проблемы в будущем, требует суррогатных ключей и всевозможных других проблем.
  2. Дизайн 2 имеет проблемы с изменениями схемы. Если вы измените таблицу «Сотрудники», вы должны изменить таблицу «Истории сотрудников» и все связанные с ней sprocs. Потенциально удваивает ваши усилия по изменению схемы.
  3. Дизайн 1 работает хорошо и, если все сделано правильно, не требует больших затрат с точки зрения производительности. Вы можете использовать схему xml и даже индексы, чтобы преодолеть возможные проблемы с производительностью. Ваш комментарий об анализе xml действителен, но вы можете легко создать представление с помощью xquery, которое вы можете включить в запросы и присоединиться к ним. Как-то так...
  4. CREATE VIEW EmployeeHistory
    AS
    , FirstName, , DepartmentId
    
    SELECT EmployeeId, RevisionXML.value('(/employee/FirstName)[1]', 'varchar(50)') AS FirstName,
    
      RevisionXML.value('(/employee/LastName)[1]', 'varchar(100)') AS LastName,
    
      RevisionXML.value('(/employee/DepartmentId)[1]', 'integer') AS DepartmentId,
    
    FROM EmployeeHistories 
    

    databases

sql

database

database-design

versioning

2022-11-08T22:56:18+00:00