Am observat ca SqlServer temporal tables( sau , generic, orice forma de temporal tables – fie prin trigger-e sau cod ) are o indicatie destul de buna asupra cum ar trebui organizata baza de date.
De exemplu , avem tabela Employee cu legatura la Department:
Id | Name | IDDepartment |
10 | HRManagerasad | 1 |
13 | HRManagerasad | 2 |
18 | HRManagerasad | 2 |
22 | HRManagerasad | 21 |
Ce e gresit aici? Pai, ce se schimba de obicei la un Employee ? Departamentul … Numele mai rar ( ma rog, odata …)
Hai sa vedem cum arata tabela cu datele temporale dupa schimbarea Departamentului:
select* from Employee FOR SYSTEM_TIME BETWEEN ‘2017-07-01’ AND ‘2017-09-01’ where Id=22
Id | Name | IDDepartment |
22 | HRManagerasad | 21 |
22 | HRManagerasad | 2 |
22 | HRManagerasad | 25 |
22 | HRManagerasad | 23 |
22 | HRManagerasad | 21 |
Acum pare evident : IDDepartment trebuie sa stea intr-o alta tabela. Caram dupa noi numele Angajatului in temporal tables de fiecare data – fara sa fie nevoie.
Si acesta este un exemplu simplu. Uitati-va la cea mai CUD tabela – si vedeti ce se schimba cel mai des….