History table design for supertype/subtype
It sounds like what you want is an implementation of transaction-time temporal tables. It's harder than it sounds.


  Valid time, capturing the history of a changing reality, and
  transaction time, capturing the sequence of states of a changing
  table, are orthogonal, and can thus be separately utilized or applied
  in concert. A table supporting both is termed a "bitemporal table".


Reference: Developing Time-Oriented Database Applications in SQL, by Richard Snodgrass, p 20.

This book was the only book I could lay my hands on when I was working on this stuff some years ago. Now you can download a PDF of the book and the accompanying code from the author's web page. 

Newer material might be more useful. There are links on his web page.