Нормализация проблемы с историей данных - PullRequest
0 голосов
/ 13 июня 2018

У меня есть две сущности: Location и Employee.Каждый сотрудник работает в одном месте одновременно.Для любого данного момента времени модель выглядит следующим образом:

enter image description here

Однако требуется также хранить историческую информацию для всех местоположений исотрудники на каждый конец месяца.Я могу добиться этого, добавив атрибут Month PK в обе сущности, но: как мне обработать отношение в этом случае?

Внешний ключ должен ссылаться на составной PK вего полнотаНа ум приходит несколько альтернатив:

Опция 1: повторите атрибут Month в сущности Employee, чтобы получить полный PK в качестве атрибутов FK.Это чувствует себя немного излишним?Если работник существовал в определенном месяце, он, безусловно, должен работать в каком-либо месте в том же месяце, т. Е. Два атрибута Month должны всегда иметь одинаковое значение:

enter image description here

Опция 2: повторно использовать атрибут Month в PK объекта Employee в качестве внешнего ключа, ссылающегося на Location.Я даже не знаю, разрешено ли это (примечание: в конечном итоге я собираюсь использовать SQL Server, если это имеет значение)?

enter image description here

Вариант 3: создать отдельный объект моста, который хранит историю отношений Location-Employee.Это выглядит довольно аккуратно, но опять же у меня есть некоторые сомнения относительно того, могу ли я использовать один атрибут Month здесь или мне нужно два из них.Кроме того, это позволило бы установить отношения «многие ко многим» (сотрудник в нескольких местах в течение определенного месяца), что в данном случае не должно происходить, и я хотел бы иметь возможность применять это в модели данных.

enter image description here

Я что-то упускаю здесь очевидное?Что такое «правильное» и правильно нормированное решение?Или я должен просто оставить ограничения FK?

...