Sql server ASP.Net游戏网站表的SQL DB设计
我正在使用ASP.NET和SQL创建一个游戏信息网站,需要一些帮助来确定设计保存发布日期的表的最佳方式。我在考虑一个两列的设计(Sql server ASP.Net游戏网站表的SQL DB设计,sql-server,database-design,asp.net-4.5,Sql Server,Database Design,Asp.net 4.5,我正在使用ASP.NET和SQL创建一个游戏信息网站,需要一些帮助来确定设计保存发布日期的表的最佳方式。我在考虑一个两列的设计(ExactDate,RoughDate),每个列都可以为空,但它似乎并不正确。该表将需要能够容纳以下日期格式,我想按最接近当前日期的日期进行订购(因此提前推出的游戏将首先列出): 关于如何最好地处理不同的日期有什么想法吗?根据我上面的评论,我认为可能值得考虑的是,您是否需要一个2列显示日期/排序日期系统之外的任何东西-我倾向于使用这个简单的选项,直到它增加了太多的摩擦,
ExactDate
,RoughDate
),每个列都可以为空,但它似乎并不正确。该表将需要能够容纳以下日期格式,我想按最接近当前日期的日期进行订购(因此提前推出的游戏将首先列出):
关于如何最好地处理不同的日期有什么想法吗?根据我上面的评论,我认为可能值得考虑的是,您是否需要一个2列显示日期/排序日期系统之外的任何东西-我倾向于使用这个简单的选项,直到它增加了太多的摩擦,在这一点上,您可以重新考虑 就一个不那么简单的模型而言;如果发布日期(及其相对顺序)非常重要,您希望确保2013年初出现在2013年2月21日之前(反之亦然),那么您可以建立一个“发布日期”表 这将在未来20年或其他任何时间(仍然只有几千行)的每种组合中预加载,您只需将其视为FK并使用常用的联接语法即可使用它。可以通过“开始/结束”列进行排序,您也可以将搜索范围限制在这些范围内(可能只针对可能在未来6周或其他时间发布的游戏)
正如我所说,我真的不建议直接走这条路线,因为它的主要好处是易于与ui设计师集成和一致性(因为除了选择一个选项之外,没有人为的决策),所以在你完成网站建设之前,我绝对不会费心:)我会选择两栏式设计(显示文本nvarchar,重新生效日期) ReleaseDate将是一个计算列,它将根据DisplayText列中存储的数据计算其日期。只需创建UDF,它将根据DisplayText列中存储的数据计算日期,您应该很好。此UDF将有点复杂,但不会太多
如果您想降低性能密集度,请将ReleaseDate创建为非计算列,但每次插入或更新DisplayText中的值时,都要使用触发器更新其值。为什么两列看起来不正确?具有“显示日期/文本”和“排序日期”似乎完全有效,可以让您避开诸如2013年第1季度应在2013年初之前或之后出现的问题,让您继续交付。@chrisb两列的最初想法是一个具有正常日期,另一个具有基于文本的日期。我没有考虑显示日期和排序日期两列设置。我认为你实际上会工作得很好。
DD-MM-YYYY
(Q1/Q2/Q3/Q4)-YYYY
(Early/Mid/Late)-YYYY
(Spring/Summer/Fall/Winter)-YYYY
TBA
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