我正在使用ASP.NET和SQL创建一个游戏信息站点,需要一些帮助来决定设计保存发布日期的表的最佳方法。我正在考虑一个两列设计(ExactDate
,RoughDate
),每列都可以为空,但它似乎并不正确。该表格需要能够保存以下日期格式,并且我希望按当前日期的最接近日期排序(因此首先列出的游戏会先列出):
DD-MM-YYYY
(Q1/Q2/Q3/Q4)-YYYY
(Early/Mid/Late)-YYYY
(Spring/Summer/Fall/Winter)-YYYY
TBA
关于如何最好地处理不同日期的任何想法?
答案 0 :(得分:0)
根据我上面的评论,我认为它可能值得考虑你是否需要更多的2列显示日期/排序日期系统 - 我倾向于选择这个简单的选项,直到它添加太多摩擦,此时你可以重新考虑......
就那个不太简单的模型而言;如果发布日期(及其相对排序)非常重要,您希望确保2013年之前出现在2013年2月21日之前(反之亦然),那么您可以建立一个"发布日期"表
DisplayText | Type | Start | End
01/01/2013 | 1 | 2013-01-01 | 2013-01-01
Q1-2013 | 2 | 2013-01-01 | 2013-03-31
Early-2013 | 3 | 2013-01-01 | 2013-06-30
这将预先加载未来20年的任何组合或其他任何组合(仍然只有几千行..)并且您只需将其视为FK并使用通常的连接语法来使用它的。订购可以通过“开始/结束”列完成,您也可以将搜索限制在这些范围内(可能仅适用于未来6周内可能会发布的游戏或其他类型)
正如我所说,我真的不建议立即走这条路线,因为它的主要好处是易于与ui设计师整合和一致性(因为除了选择一个选项之外没有人类决策)所以在你完成网站建设之前,我绝对不会打扰:)
答案 1 :(得分:0)
我选择两列设计(DisplayText nvarchar,RelaseDate日期)
ReleaseDate将是一个计算列,它将根据存储在DisplayText列中的数据计算它的日期。只需创建UDF,它将根据DisplayText列中存储的内容计算日期,您应该很好。这个UDF会有点复杂,但不会太多。
如果你想降低性能,那么将ReleaseDate创建为非计算列,但每次插入或更新DisplayText中的值时都使用触发器更新其值。