数据类型-全局观-合作

         首先,自己对数据类型没有足够重视,导致很多次都遇到麻烦,但草草解决之后也没有想如何避免的问题。昨天听完学术交流会,其中考试系统也遇到数据类型的问题,从我多次被迫改动数据库以及代码的感受来说,初期做好数据库规划、从全局上把控各个部分的交互太重要了!


    我想从一个错误说起。 

    选择4号仓,错误如下:

 

                                                “警告”-查询失败!

 

    选择1号仓,结果如下:

               


    粮仓名称都是从Device表里查出来的,温湿度都是从TempHumi表里查出来的,而且两个表里确定都有数据,同样的操作竟然有不一样的结果??

 

    解析:

 

    提示查询失败就是查询语句不正确,但既然选1号仓能查出结果就证明SQL语句是没有问题的,我想了其中的逻辑和数据都没有问题。最后发现,数据库缺少表!原来我们的粮仓名称统一保存在Device表里,但每一个粮仓名称又需要进行布局等设置,只有设置完成的仓才会有温湿度的表,这个表是动态生成的,表名为TempHumi+粮仓名称,之前没有出错是因为测试太少,12号仓是有各种表和数据的,而且我们的项目马上就要结束了,昨天同组的人加了一张表,却没有告诉我,所有被动态生成表的仓全部存储在另一个表里,如果我从这张表里获取粮仓名称就不会出现这种问题了。

  

    第二点是,对于同一问题的处理最好有统一的解决方案。

    

    多人合作又有交互就肯定会出现问题,但不能东边有需求就改东边,西边有错误就顺着西边,在这个四人各据一方的双天平上,东西不一则南北失调,所以要统一改动,改动必须通知。


    对于获取粮仓名称来讲,首先我们就需要规范字段,datatable中是用索引还是别名都要提前声明,不统一的后果就是当头的下命令,当兵的三番五次地改。

 

    再如,比较令人头疼的datetime如何处理的问题。

    

界面上有DateTimePicker,这家伙有好几种表示日期的形式,有兴趣的同学现在动一下手指用搜狗输入法敲“sj”,就可以看到时间的两种表示形式,但都有日期和时间点。当然,我们还有N多种函数可以获取当前时间,N多种数据类型存储数据。但时间格式不统一就是个麻烦事。

    最初,我把检测时间“startDate”字段的数据类型设为date,以为在数据库规范一下,不管输入的是什么格式,都转换成date类型存到表中,这样可以减少出错,是最合适的了。


      

    可事实上,它并不是这样的,大家看下图,开始日期的数据类型是date,结束日期的类型是varchar20)。可以看到,开始日期完整表示是2014/1/25 0:00:00(与后面的开始时间重合,如果不是重合我也不会发现这个问题)。

       


    至此,我没有找到比较合适的数据类型。所以,我采用了Format函数。不管是取日期时间控件的表示值,还是用函数往数据库存时间值,都用Format(Now.Date,"yyyy-MM-dd")规范。不然大家可以看到他们是不一样的,这样去数据库查询数据的后果是什么呢?


      Select *from T_Device where testDate='2014/1/25'

     “警告”-查询失败!


       

       


         另外,合作开发小组成员各自负责一部分,但有交互,所以修改要慎重。尽可能在开始设计时考虑充分,比如数据类型,对于交互频繁的地方要规范每个人往数据库写数据时的格式。当然我们无法保证数据库开始就建的合理,所以在发现不合理时,先考虑如何修改改动最少、改正最快,尽可能让少数人修改且最容易修改的人去修改。尽管有时方法名等不太合理,但在保证基本意思的情况下要改接口,而不是改UN多调用方法的函数名。


评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值