我試圖爲報告應用程序建模DateRange概念。某些日期範圍需要是絕對的,2011年3月1日至2011年3月31日。其他日期範圍相對於當前日期,過去30天,下週等。什麼是將數據存儲在SQL表中的最佳方式是什麼?如何在SQL數據庫中存儲絕對和相對日期範圍?
顯然對於絕對範圍,我可以有一個BeginDate和EndDate。對於相對範圍,具有InceptionDate和整數RelativeDays列是有意義的。如何將這兩個想法合併到一個表中,而不需要實現上下文,即提及所有四個列,並使用異或邏輯來填充4中的2個。
由於具有上下文驅動而被拒絕的兩種可能模式列:
CREATE TABLE DateRange
(
BeginDate DATETIME NULL,
EndDate DATETIME NULL,
InceptionDate DATETIME NULL,
RelativeDays INT NULL
)
OR
CREATE TABLE DateRange
(
InceptionDate DATETIME NULL,
BeginDaysRelative INT NULL,
EndDaysRelative INT NULL
)
感謝您的諮詢!
我對NULL沒有宗教信仰,但是我討厭RDBS中的上下文列,即「列A只在列B爲空,而列C代表不同的事情取決於A或B被填充時填充。」 – ant
那麼,在這裏,您將看到兩個不同且相同的實體。不同之處在於其中一個具有與之相關的額外數據。你要麼需要一個具有這種細微變化的表格,要麼需要兩個不同的表格。 –
我喜歡將存儲表與空表示當前日期的NULL結合起來,然後使用適當呈現這些日期的'Solved'視圖。謝謝! – ant