1

我正在使用 ASP.NET 和 SQL 创建一个游戏信息站点,需要一些帮助来确定设计保存发布日期的表的最佳方式。我在想一个两列设计(ExactDate, RoughDate),每列都可以为空,但它似乎并不正确。该表需要能够保存以下日期格式,并且我想在最接近当前日期的日期之前订购(因此,较早推出的游戏首先列出):

DD-MM-YYYY
(Q1/Q2/Q3/Q4)-YYYY
(Early/Mid/Late)-YYYY
(Spring/Summer/Fall/Winter)-YYYY
TBA

关于如何最好地处理不同日期的任何想法?

4

2 回答 2

0

根据我上面的评论,我认为它可能值得考虑您是否需要超过 2 列显示日期/排序日期系统 - 我倾向于使用这个简单的选项,直到它增加太多摩擦,此时你可以重新考虑...

就一个不太简单的模型而言;如果发布日期(及其相关顺序)足够重要,以至于您希望确保 Early-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 设计器集成和一致性(因为除了选择选项之外没有人为决策)所以直到你完成建立您的网站我绝对不会打扰:)

于 2013-02-21T21:40:59.340 回答
0

我会采用两列设计(DisplayText nvarchar,RelaseDate 日期)

ReleaseDate 将是一个计算列,它将根据存储在 DisplayText 列中的数据计算其日期。只需创建 UDF,它会根据 DisplayText 列中存储的内容计算日期,你应该会很好。这个UDF会有点复杂但不会太多。

如果您想让它的性能强度降低一点,则将 ReleaseDate 创建为非计算列,但每次插入或更新 DisplayText 中的值时使用触发器更新其值。

于 2013-02-22T11:06:33.553 回答