关于数据库设计中的时间数据类型选择,date/time/datetime--long选哪个更好?

华兹格 发布于 2013/07/30 09:31
阅读 6K+
收藏 0

(1)date/time 与 long型 的选择

在系统设计时,遇到了一个签到模块,功能是:用户每天签到赚取积分,没人每天只有一次签到机会,对这样的需求,我的数据表是这样设计的: 

列名

类型

        约束

  键       

描述

id

int

      not null          

主键

自增

user

int

      not null 

参照users

checkin_date

date/long

      not null 

签到日期

checkin_time              

time/long             

      not null 

签到时间

业务流程如下:用户点击签到后,程序首先判断在这一天里有没有签到记录,如果没有的话才允许签到,如果有签到记录,则提示已签到(或者签到按钮不可用--用户页面初始化的时候设置)。 

对于这样一个简单的需求,我在签到日期、签到时间上的数据类型选择上并不知道是使用date/time 类型,还是使用long型?主要考虑到数据库查询、添加性能。如果使用 date/time ,那对于页面来说,处理的就简单;对于使用long型,可能插入时候方便吧,查询呢?比如查今天的签到情况? 

(2)datetiem/timestamp 与long型的选择

这个问题也和上一个一样,只是情景不同。比如我们在发布帖子的时候,会加上一个时间戳标记,表示这个帖子的发布时间。但是使用哪种数据类型方式呢?由于这样一个字段,在索引优化方面需要考虑,不知那种表示方式更好,求解答。

(3)关于osc会员头像实际存储位置的疑惑

@红薯 ,我观察了下osc个人空间里的源码,发现用户的头像路径信息是这样:

<span class='U'>
        <a href="http://my.oschina.net/xxx" class='Name' title='男'>xxx</a>
		<span class='opts'>
			<img src="/img/2012/men.png" align='absmiddle' title='性别'/>
        		<a href="http://my.oschina.net/xxx/admin/profile">修改资料</a>
			<a href="http://my.oschina.net/xxx/admin/portrait">更换头像</a>
        	</span>
    </span>

  开始我以为头像路径会存储在:

http://my.oschina.net/xxx/img/2012/men.png
但是在地址栏输入,敲回车后,发现404,是不是你做了资源访问保护?也请您对我上面遇到的问题给我解答一下,对了,上次为你的关于osc非法字符过滤模块,你只是说功能不好使,能不能发一份代码给我,我实际测试一下然后看看能不能修改,如果可以的话请发一份到我邮箱哈:624088783#qq.com  

请osc高手们,能介绍下在以上具体业务问题上的最佳处理方式,非常感谢!



加载中
0
红薯
红薯
这个不是头像地址,这是标注性别的图标:)
华兹格
华兹格
回复 @红薯 : 明白,谢谢哈!这个疑问终于解决了!那上面几个问题呢?还有那个非法字符过滤系统,嘿嘿
红薯
红薯
回复 @hanzhankang : 没有那个 xxx
华兹格
华兹格
回复 @红薯 : 如何输,嘿嘿~~发地址看看
红薯
红薯
回复 @hanzhankang : 你输错了,当然访问不到
华兹格
华兹格
恩恩,明白了,我一直看错了,哈哈!~不做这个地址也很特别啊,访问不到
0
红薯
红薯
我习惯用 date/time ,因为比较直观
华兹格
华兹格
回复 @jorneyr : 谢谢你,我现在把java中的时间long值直接存入数据库,在数据库里可以使用int,int占4个字节,DATETIME/TIMESTAMP 占8个字节,而且我发现有些系统是使用的int标识的。
公孙二狗
公孙二狗
回复 @hanzhankang : 存储时间的毫秒,创建Date的时候传入此毫秒值和使用此时间的时区即可。这样同一时间值在不同的时区显示的事不同的时间表示。
华兹格
华兹格
回复 @jorneyr : 时区问题也是需要考虑的因素,之前我在Cf上传一个项目,服务器在美国,咱在国内访问,看到的却是美国的时间。您能告诉我如何解决时区问题嘛?还有,查询处理上的做法呢?谢谢拉!
公孙二狗
公孙二狗
回复 @hanzhankang : 我也推荐用long,从设计意义上说,可以很容易的解决时区问题,即使用不到。
华兹格
华兹格
恩恩,我也喜欢这个方式,只是我看到其他人推荐用long,我就有点动摇了。
0
王瑞平
王瑞平
数据类型建议用varchar2
华兹格
华兹格
用这个?可行吗?性能问题呢?比如查2013-7-28以后的帖子列表。。你确定你没有搞错?
0
王瑞平
王瑞平
好好学
华兹格
华兹格
大哥,讲讲原因啊!好好学 怎么解释?
0
伊万
伊万

这个其实就不用那么纠结了,你是怕如果使用日期类型,在查询时可能会比较不方便,其实很方便的,根本不用担心,:)。干嘛要签到日期、签到时间两个字段呢?有一个“签到时间”就完全足够了,它包含了签到日期啊,用datetime类型就好。日期类型的字段的索引优化方面不是太清楚。

0
王瑞平
王瑞平
预先以后更换数据库
返回顶部
顶部