Моделирование данных: сотрудники и их навыки

#database #database-design #model #relational-database #modeling

#База данных #база данных-дизайн #Модель #реляционная база данных #моделирование

Вопрос:

Я создаю модель хранилища данных о данных о людских ресурсах и не могу самостоятельно решить, какая таблица фактов будет содержать эволюцию навыков сотрудника :

У меня есть таблица сотрудников и таблица навыков. Каждый сотрудник может обладать несколькими навыками (я надеюсь на них!) На разном уровне (100, 200, 300).

Мне нужно сохранить историю каждого сотрудника / навыка / уровня квалификации, чтобы они могли анализировать свою собственную эволюцию с течением времени.

1- Я думал о таблице транзакционных фактов, но в ней будет всего несколько строк каждый год для каждого сотрудника, например, Джеймс получил новый навык с уровнем 100 8 января, затем строку с уровнем навыков 200, скажем, через 3 месяца, и так далеевкл… Графический анализ показал бы много пустых мест (когда нет никаких новых навыков / уровня квалификации), или мне нужно будет выполнять сложные запросы, чтобы получить что-то интересное, например, если я хочу знать, каковы все навыки одного сотрудника в определенный момент времени? Эта таблица фактов кажется мне очень неестественной в использовании…

2- Итак, я думаю о таблице фактов моментального снимка, которая помогла бы мне легко ответить на предыдущий вопрос. Зная, что мне нужно будет хранить снимок навыков каждого сотрудника каждый день, чтобы убедиться, что я не потеряю никаких изменений данных. Разве это не огромная таблица для всего нескольких изменений за год ? Стоит ли делать снимок, чтобы упростить анализ, в то время как у меня была бы та же информация в таблице фактов транзакций меньшего размера?

Каков наилучший подход ?

Большое спасибо за ваши советы !

Позаботьтесь о себе

Ответ №1:

Обычно оптимальным подходом является создание таблицы фактов на самом низком уровне детализации. Вам не нужно предоставлять это своим конечным пользователям (если вы, конечно, не хотите), но затем вы можете создавать любые другие таблицы фактов на этой основе.

В вашем случае, если вы создаете таблицу транзакционных фактов (содержащую запись каждый раз, когда кто-то приобретает навык), вы можете легко запросить ее, чтобы получить текущее положение всех навыков, и вы можете создавать снимки, если это необходимо.

Я бы не стал создавать ежедневный снимок, но, например, может быть полезно иметь снимок на конец месяца. Учитывая, что навыки вряд ли будут меняться ежедневно, для любого человека создание ежедневного снимка приведет к созданию значительного объема дублирующихся данных