• If the new and changed records can be easily identified, I would side on the staging tables having the same structure as the source data. If not, and you effectively have to compare today's snapshot with the existing data, I would side with a denormalised table and then use MERGE/EXCEPT/INTERSECT to identify the new and changed records.

    This is known as Slowly Changing Dimension data. Are you keeping history (type 2 SCD) or overwriting changed records (type 1 SCD).

    If you have a lot of this to do, you might want to look at the Data Vault model. Briefly, DV breaks data into three components: Hubs - The entity identifiers, Links - the relationshipts between Hubs, and Satellites - the interesting stuff about the Hubs. In your example EmployeeID and DepartmentID will be HUBS, EmployeeID-DepartmentID is a LINK, and EmpName, dob, paygrade etc go into a SATELLITE as does DeptName, Dept Location.

    Aaron