让你提前知道软件开发(27):创建数据库表和索引
2015-08-11 21:54
274 查看
文章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,欢迎关注!)
数据库表及索引的创建
数据表(或称表),是数据库最重要的组成部分之中的一个。数据库仅仅是一个框架。数据表才是事实上质的内容。举个样例来说,数据库就像是一座空旷的房子。而数据表是里面的家具,没有家具的房子仅仅是一个空壳而已。依据信息的分类情况,一个数据库中可能包括若干个不同用途的数据表。
表结构有简单、有复杂,这就对开发者提出了要求。
怎样设计一个表的字段才是最好的?表的字段怎样命名?怎样定义表字段的类型?怎样建立索引?等等。
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,欢迎关注!)
相关文章推荐
- Oracle 学习之RAC(一) 架构解析
- MyBatis -- sql映射文件详解
- SQL遍历文件夹 / 文件,返回文件夹列表信息
- 数据库之Case When
- Redis
- MySQL的分页
- 工作流中切换数据库时---“禁止流转”
- MySQL建议列属性尽量为NOT NULL
- SQL Server 2008下日志清理方法
- Excel中的数据导入到SqlServer数据库中
- sql中更新不同库中的表
- 亚马逊AWS学习——为oracle类型的RDS数据库部署数据
- SQL Server:“数据收缩”
- MySQL数据库事务隔离级别(Transaction Isolation Level)
- SqlLite 基本操作
- 8月11日----数据库、serverlet
- 数据库日常维护-CheckList_02有关数据库备份检查
- sql之截取字符串函数
- 简单SQL语句
- Unity3D 连接MySQL数据库笔记4-Unity3d代码