• David, Thanks for your help in clarifying this and for your endorsement of our book. Tom wrote a follow-up book titled "Bitemporal Data - Theory and Practice" where he gets into more details about SCDs and other items that might help in understanding this.

    So, in our book and in the SQL Server Framework we propose using "Object IDs" which might be considered something like an Anchor_Id in an Anchor model to identify an object, where it represents one Entity (or relationship), irrespective of time. So, a Person would only have one Object ID even though it might have many versions. Now, a person might have a Business Key such as SSN, and we typically enforce the uniqueness of that BK at any "one" instance in time. However, we allow someone to assign a new BK to an Object at a new point in time. So, say my Credit Card Acct OBID is 123 and my Credit Card# was my BK, but they change my CC because of a breach. I can assign the new CC# BK to OBID 123 as-of a certain date. We don't allow two BKs at the same time as part of the framework, and we treat that BK like a non-temporal primary key for backward compatibility. However, if having two active at one time was a requirement, a child table could be created with a list of CC#s assigned to a parent OBID. Thanks again!