How to design a database for non-time invariant data
It sounds like a problem easily solved by placing key tables in version normal form (VNF). This is actually just a flavor of 2nf but done in a way that provides the ability to query current data and past data using the same query.

A datetime parameter is used to provide the distinction. When the value is set to NOW, the current data is returned. When the value is set to a specific datetime value in the past, the data that was current at that date and time is returned.

A brief discussion of the particulars can be found in an answer I gave here. That answer also contains links to more information if you think it is something that would work for you.