您的位置:首页 > 数据库

数据库设计中,日期字段的类型应该如何选择?

2013-01-30 20:36 721 查看
几乎大多数软件系统都需要依赖于数据库来存储数据,这些数据库大多是支持标准SQL也就是ANSISQL的,我们可以定义各种类型的字段,其中我们常常需要用一个字段来表示日期。但是在不同的数据库我们可以用不同的字段类型来存储日期,比如我们可以用整型数字字段来存储日期时间,也可以用字符串类型的字段来存储日期时间,当然也可以用各种数据库提供日期类型的字段来存储日期时间,但是我们在实际应用中选择哪种更合适呢?根据我个人的经验和想法,得出以下一些看法,用于对各种日期字段设置方法进行优缺点说明(本人一般是使用Java编写程序):

1.直接使用日期型字段。

使用日期类型字段存储时间,这样程序编写很方便,可以直接查询或者存储日期对象,提高了程序的优雅性。缺点是如果是这样设计的数据库,万一要进行异种数据库的数据迁移就可能会带来不便。因为不同种类的数据库的日期存储格式可能不一样,另外就是不太方便利用SQL对日期相关的数据实现一些特别的查询及其它操作,比如按月分组、按季节分组,就算实现了也往往和一种类型的数据库联系太紧密或者别扭。

2.使用整型字段来存储数据。

使用整型字段来存储日期又可以分类:

第一种方法是直接存储自1970年1月1日到现在经过的毫秒数,一般都编程语言都对这个数提供了方法支持,比如java的System.currentTimeMillis()。这种方法使用起来也还算方便,在数据库数据的迁移等方面也还顺利,在进行数据库日期范围查询时也比较方便和精确。比如要查询指定日期前12小时的数据,就可以轻松将程序处理好的时间作为时间条件。缺点是不方便对时间进行分组查询,比如按月统计、按季统计等。

第二种方法也是存储整数数据,但是是严格按住诸如"20050926"的格式存储的,规定哪几位存放年,月或日。这样的方式既便于数据库的升级和数据的迁移,也便于数据的多种查询。通过数据库提供的简单标准的数学函数,我们可以非常灵活地实现复杂查询。比如按日期字段除以100的结果值进行分组,就实现了按月分组。这个方法缺点也较明显,日期数据的存储前和读取后都要进行一个转换,降低了效率和优雅性。

3.使用字符串类型字段存储日期数据。

我们可以规定日期的字符串格式来进行存储,比如存储字符串,比如"20050926"。这样做程序编写也还方便,因为字符串的操作总是最普通常见的。数据库的查询比较灵活,比如可以灵活地使用"like"操作,在不同数据库间的迁移也同样方便,缺点是不便于实现数据的分组统计。

根据以上的描述,我们可以看出不同的日期字段设计方法会带来不同的优缺点,我们可以在软件项目中根据项目的特点来灵活选用。

以上内容摘自波波的博文(稍有改动)http://blog.tianya.cn/blogger/post_read.asp?BlogID=9171&PostID=2790460
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: