Thanks Mike, a very interesting article.
My first thought on reading this was 'Yes well it's all very nice in theory, but not much use in the real world'. Then I felt ashamed, because it struck me that just because my current information environment doesn't require 6NF, doesn't mean I will never find myself in a situation where this high level of normalisation is appropriate, and I should file this information away somewhere.
I have found that depending on how your indexes are defined, it is always worth comparing performance of queries structured like this:
WHERE @DateToCheck >= StartDate
AND (@DateToCheck <= EndDate OR EndDate IS NULL)
to the equivalent queries using COALESCE
WHERE @DateToCheck BETWEEN StartDate AND COALESCE(EndDate, @DateToCheck)
I actually eliminated EndDates from my employee contract records, because in my environment, a contract will always run until superceded by a contract with a later StartDate or until the employee termination date is reached.
David
If it ain't broke, don't fix it...