У меня есть вопрос моделирования данных, который, конечно, часто возникает, но, к сожалению, я не смог найти подходящих ресурсов. Я надеюсь, что вы можете помочь мне:
У меня есть две таблицы
Отделы = [DepID, Имя отдела, ...]
Сотрудники = [EmplID, Имя, Адрес, ...]
EmployeesAtDepartment = [EmplID, DepID]
Здесь таблица EmployeesAtDepartment должна создавать отношения между каждым сотрудником и отделом (отделами), в котором она работает (в основном только один, но может быть возможно принадлежать более чем одному отделу).
Сотрудники могут со временем менять отделы. Мне нужно не только знать текущее состояние взаимоотношений между сотрудником и отделом, но и определять состояние в любой данный момент в прошлом.
Теперь возникает мой вопрос: какие концепции доступны для моделирования этих «изменяющихся во времени отношений» в реляционной базе данных?
Мое первое предположение - добавить еще два столбца даты к EmployeesAtDepartment , например, [StartedAtDate, QuitAtDate], где последний равен NULL, если сотрудник в настоящее время работает в отделе. В этом случае в базе данных сохраняются только изменения.
Другой подход заключается в сохранении всего состояния EmployeesAtDepartment для каждой даты, то есть добавить один столбец [Дата]. В этом случае данные хранятся с избыточностью, но это позволяет довольно легко определить отношения между сотрудником и отделом для данного дня.
Можете ли вы порекомендовать какие-либо ресурсы о плюсах и минусах вышеупомянутых подходов или есть еще лучшие способы?
Спасибо!