2009-10-23 65 views
0

在SQL 2008中新日期SQL类型中只存储一年是否有意义?我的老板想要这个,但我们正在提示客户在网络表单中输入一年可选。只有4个整数。我不明白我们为什么要使用Date数据类型,因为它也包含日期和月份,而且我已经将这些分隔出来放到我们数据库表中的int字段中。使用SQL Server 2008日期数据类型以存储年份

年份在我们的网页表单上是可选的,所以如果他们只进入月份和日期,那么将它存储在日期类型的字段中是没有意义的,因为年份必须是无关紧要的。我想我们可以做01-16-1900,如果他们没有进入一年,那么我们只有一天一个月。但是无论如何,对我来说这是一个黑客。我宁愿将所有3分隔为独立的字段,因为我们将这些值中的一个(年)作为可选项。我不认为我们会需要一年,因为这是为了生日,而且我们已经讨论过,如果我们需要年份的话,这会让客户失望。

+0

这取决于你要处理的数据。你为什么需要这些数据?一旦被捕获,你对它做了什么? – 2009-10-23 19:45:04

回答

2

不,这是没有意义的。它会在数据库中产生更多的空间,并且还会不必要地添加任何代码,只需要查找年份即可。您必须在每个查询中使用DatePart()或在代码中提取年份。这两种方法都会损害性能。

但是,如果你的老板让你这么做,那么你应该这样做。我不会提出这个问题。你老板的推理是什么?

修正

我收起答案的部分上面写着“数据库中的更多的空间。”我所指的性能节省是按年份转换为查询。

+0

他喜欢捷径,我不喜欢。他喜欢把事情结合起来,对我来说这是不好的做法。你不应该自动训练你的大脑去做那件事。这就是为什么我们有1000多行代码的课程,因为他倾向于将所有内容组合在一起,他认为相反......浪费时间。因此,现在我必须在一大堆代码中工作。所以对我而言,我非常仔细地考虑将事情合并或分离。它使所有的差异。任何关心干净代码的开发人员都会同意。 OOP并不意味着要被组合成巫婆酿造,也不是数据 – PositiveGuy 2009-10-23 20:54:17

+0

你错了,Date类型是3个字节,而3个int字段是12个。你绝对不会损害使用日期类型的性能。 – ChaosPandion 2009-10-23 21:33:56

+0

冒着听起来好斗和幼稚的风险...不,你错了。 (至少部分)每当你需要获得一年的时间时,你会在转换过程中失去表现。你认为哪个表在数百万行的表中会更快?选择...哪里DatePart(year,SomeDateField)= 2009或Select ...哪里SomIntField = 2009?转化费用很高。这就是为什么我在我的答案中特别加入了句子“你必须在每个查询中使用DatePart()”。 – David 2009-10-23 21:40:52

2

不要这样想。只需使用日期类型并完成它。

注:

考虑到Ron的答案,分别存储每个日期分量在时间上是一种退步。你应该永远利用提供给你的工具。 Date类型是任何.NET语言中的第一类公民。

如果您没有考虑到这一点,使用日期将节省空间。

http://msdn.microsoft.com/en-us/library/bb675168.aspx

+1

它不是过度的。我已经实现了整数字段,其中3个。为什么要在一年中将黑客分成它自己的int域。 Year是可选的。 – PositiveGuy 2009-10-23 20:51:02

+0

他还将整日和月份存储为整数。我不觉得要投票表决。 – ChaosPandion 2009-10-23 22:37:25

1

如果没有理由把独立日/月INT列插入日期栏,我不明白为什么一个可选的一年应该被存储为一个日期。

东西让我想看到的月/日的列日期太...但我喜欢的另一逻辑“不overthink这个”以及...

+1

为什么?那么你必须在日期中填入虚假信息。这是我想要做的。我为什么要用部分数据创建日期......没有意义。 – PositiveGuy 2009-10-23 20:51:52

1

就个人而言,我会将所有3个值(月,日,年)作为日期字段中的日期存储 - 如果未输入日期则默认为年份。这样你就可以自动验证月份和日期是有效的......除了2月29日和无年,因为日期数学不会知道这是不是闰年。

将它们存储为整数表示您必须自己完成所有验证。

+0

+1 - 好点 – ChaosPandion 2009-10-23 21:52:07

相关问题