• The other point not mentioned, is that, for DimDate and DimTime, the real reason over and above the performance of joining via an int (and typically not going via the DimDate either) is the additional information required.

    Almost all places have a financial calendar that is NOT the normal calendar, and having both of these in the table is essential.

    Same for time, shifts are NOT (legislatively in most countries) 24 hours long, and also don't match up to the 24 hour period anyway