漫谈数据库SQL语言(2):表及索引的创建

       数据表(或称表),是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质的内容。举个例子来说,数据库就像是一座空旷的房子,而数据表是里面的家具,没有家具的房子只是一个空壳而已。根据信息的分类情况,一个数据库中可能包含若干个不同用途的数据表。

       表结构有简单、有复杂,这就对开发人员提出了要求。如何设计一个表的字段才是最好的?表的字段如何命名?如何定义表字段的类型?如何建立索引?等等。

 

1.     修改之前的建表脚本

      在作者从事过的某项目中,有一个建表脚本(基于Sybase数据库)样例如下:

-- XXX

create table tb_XXX

(

           AAA                 varchar(30)         not null,   -- AAA

           BBB                 int                 not null,   -- BBB

           . . . . . .

           . . . . . .

          processtime1   varchar(24)  default(‘‘)  null,  -- yyyy.mm.dd hh24:mi:ss

          processtime2  varchar(24)  default(‘‘)   null,  -- yyyy.mm.dd hh24:mi:ss

          processtime3  varchar(24)  default(‘‘)   null,  -- yyyy.mm.dd hh24:mi:ss

           . . . . . .

          nextprocesstime varchar(24)  default(‘‘) not null, -- yyyy.mm.dd hh24:mi:ss

           . . . . . .

)

go

create unique index idx1_tb_XXX on tb_XXX(AAA)

create index idx2_tb_XXX on tb_XXX(BBB)

go

 

      可以看出,以上的建表脚本至少存在以下问题:

      (1)  字段命名不是很恰当。如红色字体所示的processtime1processtime2processtime3,在看完之后,还不知道它们到底是什么意思。因此,对于字段的命名,要做到直观易懂,不要让别人去猜。

      (2)  时间字段的默认值为空。如红色字体所示的nextprocesstime字段,其默认值为空。一般而言,对于数据库建表脚本中的时间字段,如无特殊用途,其默认值最好设置为当前时间。

      (3)  建立的索引数目过少,且在时间字段上面未建立索引。在表中很多个字段,而只建立了两个索引,个数偏少,可考虑增加索引数目。此外,表中有多个时间字段,但未在其上面建立索引,要求只要在表中出现了时间字段,都要考虑在其上建立索引。

 

2.     修改之后的建表脚本

      修改之后的脚本样例如下:

-- XXX

create table tb_XXX

(

     AAA                  varchar(30)              not null,   -- AAA

     BBB                  int                    not null,   -- BBB

     . . . . . .

     . . . . . .

   firstlastprocesstime varchar(24)  default(‘‘) null,   -- yyyy.mm.dd hh24:mi:ss

   secondlastprocesstime varchar(24) default(‘‘) null,  -- yyyy.mm.dd hh24:mi:ss

   thirdlastprocesstime  varchar(24)  default(‘‘) null,  -- yyyy.mm.dd hh24:mi:ss

    . . . . . .

  nextprocesstime varchar(24) default convert(varchar,getdate(),102)+‘ ‘+convert(varchar,getdate(),108)      not null,   -- yyyy.mm.dd hh24:mi:ss

. . . . . .

)

go

create unique index idx1_tb_XXX on tb_XXX(AAA)

create index idx2_tb_XXX on tb_XXX(BBB)

create index idx4_tb_XXX on tb_XXX(nextprocesstime)

go

 

       修改的地方如红色字体所示。与之前的脚本相比,修改了nextprocesstime字段的默认值,将索引数目增加到3个,在时间字段上建立了索引。此外,根据一般的经验,大表索引个数不超过5个,索引最大字段数不超过4个。

 

3.     总结

      表是数据库中最重要的数据结构之一,在创建表的过程中,一定要遵循命名规范、信息准确、索引恰当等原则。

 

 

 

(本人微博名:周兆熊,微信号:245924426,欢迎关注!)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。