【问题标题】:SQL DB Design of table for ASP.Net Gaming siteASP.Net Gaming 网站表的 SQL DB 设计
【发布时间】:2013-02-21 20:35:49
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么 2 列看起来不对?拥有“显示日期/文本”和“排序日期”似乎完全有效,可以让您回避诸如 2013 年第一季度出现在 2013 年初之前还是之后的问题,让您继续交付。
  • @chrisb 两列的最初想法是一个具有正常日期,另一个具有基于文本的日期我没有考虑显示日期和排序日期两列设置。我认为这实际上会很好。

标签: sql-server database-design asp.net-4.5


【解决方案1】:

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

就不太简单的模型而言;如果发布日期(及其相对顺序)足够重要,以至于您希望确保 Early-2013 出现在 21/02/2013 之前(反之亦然),那么您可以建立一个“发布日期”表。

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 设计器集成和一致性(因为除了选择选项之外没有人为决策)所以直到你'已经完成了您的网站的构建,我绝对不会打扰 :)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2017-05-28
      • 2011-01-26
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多