Glossary
Bitemporal data
Bitemporal data records both when a fact applied in the world and when a system knew or recorded it.
Time and versioning
Bitemporal data assigns two independent time dimensions to a statement. Valid time describes the period during which the statement applied in the represented world. Transaction time describes the period during which it was recorded as part of the database's history. The distinction permits a later correction of an earlier fact without pretending the correction was known earlier. Neither dimension alone answers both historical questions.
In practice, a late notice can change the account of an earlier interval while leaving an intact record of the former account. Queries must state whether they ask what was considered true at a past observation date, what is now believed about that past date, or both. Interval boundaries and time zones need explicit conventions. A timestamp attached to a document is not automatically either valid time or transaction time for every claim it contains.
This matters when an organization must explain a decision made before a correction arrived. A current record might say that a licence expired on Monday, while the decision team learned that fact on Thursday. A bitemporal view can separate the state relevant to Monday from the information available on Tuesday. It complements as-of queries and point-in-time reproducibility; it does not establish that either recorded statement was factually correct.
Example
Halden Therapeutics AG (fictional) learns on 8 June that a registration ended on 1 June. Valid time changes from 1 June; the correction entered the record on 8 June.
The two time axes
A bitemporal record carries two independent periods. Valid time is when the fact held in the world: a supplier was based in Basel from 2019 to 2024. Transaction time is when the system held that fact as its current belief: the Basel address was entered in January 2020 and replaced in March 2024. With both, a system can answer what was true on a given date, what the system believed on a given date, and what it believed on one date about another. Martin Fowler's article on bitemporal history explains the distinction with the terms actual and record history, and the Wikipedia article on temporal databases summarises the vocabulary and the research behind it.
The point of keeping both is to separate correction from change. If the system learns in June that the supplier actually moved in March, valid time is revised, and transaction time shows that the belief changed in June. A report run in May is still reproducible as what the system then believed, even though it is now known to be wrong. Without transaction time, the correction overwrites the past and the May report cannot be explained. The article on bitemporal data versus temporal knowledge graphs compares the two designs in more detail.
Implementation options
Several database products offer system-versioned tables, which maintain transaction time automatically; Microsoft's documentation on temporal tables is a common example, and the SQL standard added period definitions and system versioning in 2011. Valid time usually has to be modelled by the application, with explicit start and end columns, because it describes the world and not the database. Lakehouse table formats such as Delta Lake and Apache Iceberg support queries against earlier table versions, which provides transaction time at the level of table snapshots.
Designs have to settle conventions that cause errors if left implicit: whether period ends are inclusive or exclusive, how open-ended periods are represented, which time zone and calendar are used, and what precision is meant. The W3C Time Ontology and RFC 3339 give standard vocabularies and timestamp formats. The article on valid time, transaction time and other clocks explains why observation and publication times often need separate treatment.
A worked example
A register shows that Halden Therapeutics AG (fictional) appointed a new director with effect from 1 February. The appointment was entered on 15 February. On 20 February a correction states that the effective date was 1 January. The bitemporal store holds three rows for the director: valid from 1 February, recorded 15 February to 20 February; valid from 1 January, recorded from 20 February; and the original row retained as history. A query as of valid date 15 January and recorded date 18 February returns no director. The same valid date with recording date 25 February returns the director. A compliance report produced on 18 February can therefore be reproduced as it was, and the later correction is visible as a correction.
Checks a reviewer can run
Pick a fact that has been corrected and ask the system what it said before the correction. Ask for the same fact as of two valid dates. Confirm that a correction never deletes the earlier row. Confirm the conventions for period ends and time zones in documentation and in a test. Confirm that backdated entries are possible and are visible as such, with the date they were entered.
Related terms and boundaries
The two axes are separately described under valid time and transaction time. Bitemporal storage makes as-of queries possible, underlies point-in-time reproducibility, and complements an append-only log. A slowly changing dimension is a simpler, single-axis technique that is often mistaken for it.
Common misreadings
- Treating a source publication date as the date every claim became valid.
- Overwriting an earlier recorded state when a late correction arrives.
- Leaving interval inclusivity and time zones undefined.
Appears in
- Golden record vs evidence-carrying record
A golden record presents preferred values; an evidence-carrying record keeps the dated source sentence with each value.
- Snapshots vs bitemporal history
Snapshots preserve states at selected moments; bitemporal history distinguishes when a fact applied from when it was recorded.
- Reproducing a past state
Reconstruct what was known at a specified instant using observation time, effective time and earlier decisions.
- ISO 8601 date and time representation
A standard for representing dates, times, intervals, and related temporal values.
References
- Snodgrass, Developing Time-Oriented Database Applications in SQL (1999).
- Fowler, Bitemporal History.
- Wikipedia, Temporal database.
- Microsoft Learn, Temporal tables (SQL Server).
- Delta Lake documentation, Table batch reads and writes (time travel).
- Apache Iceberg documentation, Queries (time travel).
- W3C (2022), Time Ontology in OWL.
Found an error on this page? See corrections for what counts as one, how to report it and the dated log.
Enquiry
Where does "Bitemporal data" bear on a decision of yours?
This entry sits under time and versioning. If a decision in your organization turns on it, send the entity concerned, the sources you fuse to describe it and who may read which of them. We reply with what a first record would cover.
Or write to [email protected] in your own words.