• 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...