Heim >Datenbank >MySQL-Tutorial >让你提前认识软件开发(27):数据库表及索引的创建

让你提前认识软件开发(27):数据库表及索引的创建

WBOY
WBOYOriginal
2016-06-07 15:57:211261Durchsuche

第2部分 数据库SQL语言 数据库表及索引的创建 数据表 (或称 表 ),是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质的内容。举个例子来说,数据库就像是一座空旷的房子,而数据表是里面的家具,没有家具的房子只是一个空壳而已。根据信

第2部分 数据库SQL语言

数据库表及索引的创建

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

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

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) 字段命名不是很恰当。如红色字体所示的processtime1、processtime2、processtime3,在看完之后,还不知道它们到底是什么意思。因此,对于字段的命名,要做到直观易懂,不要让别人去猜。

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

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

2. 修改之后的建表脚本

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

-- XXX

create table tb_XXX

(

AAA varchar(30) not null, -- AAA

BBB int not null, -- BBB

. . . . . .

. . . . . .

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

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

thirdprocesstime 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. 总结

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

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn