|
|
|
Как спроектировать таблицы для master data
|
|||
|---|---|---|---|
|
#18+
Коллеги, столкнулся со следующей проблемой. Создаю хранилище данных. В качестве ключа почти везде будет выступать сотрудник (employee), который генерирует определнную активность. У сотрудника есть следующие поля, которые могут идентифицировать его (причем в разных базах данных эти поля разные): имя, имя аккаунта, номер телефона, менеджер. Каждый из этих аттрибутов важен и нужно отслеживать его изменение. Например, у человека был менеджер A, а в момент времени T изменился на B. Если мы захотим посмотреть историю работы относительно сотрудника, то кто является менеджером нас не волнует. Но если менеджер B будет смотреть исторические показатели своей команды, то до момента времени T рассматриваемый сотрудник не должен попасть в выборку, а после T должен. Ну и аналогично по все остальным параметрам (у человека может смениться номер телефона, но это все тот же человек; у человека может смениться фамилия ну и т.д.). Я не могу сообразить каким образом мне спроектировать соответствующую таблицу. Пока что пришел к следующему варианту: Identity (id PK) - это просто фиктивная таблица с одним, ключом по которому мы будем связывать исторические данные. Employees (id PK; identity_id FK REF Identity.id; name; username; phone; manager_id FK REF Employees.id, start_date DATETIME; end_date DATETIME). Теперь пример двух записей из таблицы Employees: 201 | 3 | Ivanova, Irina | SPBIVANOI | 1111111 | 51 | 27.01.2005 | 31.05.2006 ... проходит много времени ... 943 | 3 | Petrova, Irina | MONPETROI | 2222222 | 42 | 01.10.2010 | NULL То есть за 4 года у Ирины: 1) Поменялась фамилия с Ivanova на Petrova 2) Поменялся аккаунт c SPBIVANOI на MONPEROI (он не просто генерируется из фамилия + имя, правило другое) 3) Поменялся телефон с 1111111 на 2222222 4) Поменялся менеджер с 51 на 42 В общем поменялось все. Однако Employees ранит всю историю этих изменений и при необходимсоти мы можем проследить историю изменений через identity_id (второй столбец, знаение = 3). Подскажите пожалуйста имеет ли такая идея право на существование? Есть ли более правильные/оптимальные способы хранения высоковолатильной мастер даты в хранилище? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2010, 12:01 |
|
||
|
Как спроектировать таблицы для master data
|
|||
|---|---|---|---|
|
#18+
Особенно интерисует ваше мнение по поводу таблицы Identity, в которой будет только одно поле - ключ, так как другой постоянной информации у сотрудника просто напросто нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2010, 12:03 |
|
||
|
Как спроектировать таблицы для master data
|
|||
|---|---|---|---|
|
#18+
svenomОсобенно интерисует ваше мнение по поводу таблицы Identity, в которой будет только одно поле - ключ, так как другой постоянной информации у сотрудника просто напросто нет. Эта идея имеет право на существование. Полезно рассмотреть ее крайний случай, так сказать, при котором каждая из характеристик человека хранится в своей "таблице" (так Вы исключите полностью дублирование данных за счет минимального дублирования FK). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2010, 12:56 |
|
||
|
Как спроектировать таблицы для master data
|
|||
|---|---|---|---|
|
#18+
Спасибо за комментарий. Я думаю, что идея с разнесением разных параметров по разным таблицам более применима к ситуации, когда сотрудников очень много. С одной стороны у нас будет меньше избыточной информации, с другой стороны нужно будет делать больше join-ов и проверок при вставке фактов. В моем случае сотурдников будет немного, порядка 100, а вот фактов - много тысяч в день, так что некоторая избыточность не будет являться критичной. Приходилось ли еще кому-нибудь решать подобные задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2010, 13:13 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=70&tid=1542516]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 390ms |

| 0 / 0 |
