1 Сотрудник имеет N Адрес.Здесь мне нужно сохранить историческую информацию об изменениях Сотрудника и Адреса, если какие-либо изменения были внесены любыми пользователями в этих двух таблицах.
Таблица Сотрудник:
Employee(
EmpID BIGINT PRIMARY KEY IDENTITY(1,1),
Name varchar(200),
EmpNumber varchar(200),
Createddate Datetime2)
Адрес Таблица:
Address(
AddID BIGINT PRIMARY KEY IDENTITY(1,1),
AddressLine1 varchar(300),
AddressLine2 varchar(300),
EmpID BIGINT NULL,
AddressType varchar(100),
Createddate Datetime2)
Выше EmpID - это внешний ключ к таблице Employee
Сценарий, который я должен выполнить:
- Я должен иметь возможность отслеживать изменения отдельного адреса(Записи дочерней таблицы) записи любого сотрудника.
- Я должен иметь возможность отслеживать изменения сотрудника (записи родительской таблицы) с помощью записи адреса ребенка.
Я думалследующим образом: предположим, что изначально он находится в состоянии, показанном на изображении ниже
Решение 1:
Случай: когда дочерняя таблица обновляется сейчас, я обновляюзапись адреса Add0001, поэтому я вставляю новую запись в таблицу адресов, делая предыдущую запись неактивной:
Случай: когда обновляется родительская таблица сейчас, когда обновляется родительская таблица,У меня есть история таблe для родительской таблицы, и я перемещаю старые данные в таблицу истории и обновляю текущие записи в родительскую таблицу, как показано:
Решение 2:
Случай: когда обновляется дочерняя таблица То же, что и в решении 1
Случай: когда обновляется родительская таблица
Мы вставляем новую запись в родительскую таблицу, делая предыдущие записи неактивными.В этом случае мы получаем новый идентификатор и этот идентификатор, который мы обновляем как внешний ключ для дочерних таблиц, как показано ниже:
Является ли это лучшимспособ ведения исторических данных родительско-дочерней таблицы вместе?или я могу как-то сохранить дизайн, чтобы иметь возможность отслеживать изменения данных родительских и дочерних записей?