让你提前知道软件开发(27):创建数据库表和索引

让你提前知道软件开发(27):创建数据库表和索引

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

文章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) 字段命名不是非常恰当。如红色字体所看到的的processtime1processtime2processtime3,在看完之后,还不知道它们究竟是什么意思。因此,对于字段的命名,要做到直观易懂。不要让别人去猜。

        (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,欢迎关注!)

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117297.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝

    java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝Java中的对象拷贝(ObjectCopy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;B.b=A.b;在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部数据。Java中的对象拷贝主要分为:浅拷贝(ShallowCopy)、深拷贝(DeepCopy)。先介绍一点铺垫知识:Java中的数据类型分为基本数据类型和.

    2022年9月1日
    1
  • FGC 2012

    FGC 2012JournalSpecialIssuesDistinguishedselectedpapersacceptedandpresentedinFGC2012,afterfurtherextensionandrevisions,willbepublishedinspecialissuesofthefollowingprestigiousSCI-Inde

    2022年6月19日
    30
  • 特征选择/筛选方法总结

    作者:jlianghttps://blog.csdn.net/jliang31.特征选择介绍1)特征分类相关特征:对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果; 无关特征:对于我们的算法没有任何帮助,不会给算法的效果带来任何提升; 冗余特征:不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出;2)特征选择的目的对于一个特定的学习算法…

    2022年4月7日
    39
  • 可更新resultset

    可更新resultset

    2021年8月12日
    51
  • list转json字符串,实体类包含list转实体类「建议收藏」

    list转json字符串,实体类包含list转实体类「建议收藏」StringjsonString=JSON.toJSONString(list);//list转json字符串 List<FanMate>list=JSON.parseArray(jsonString,FanMate.class);//listjson字符串转list StringjsonString=JSON.toJSONString(entity);//list转json字符串 FanMateentity=JSON.parseObject(…

    2022年10月18日
    0
  • JS 暂时性死区「建议收藏」

    JS 暂时性死区「建议收藏」JS暂时性死区ES6暂时性死区引用ES6暂时性死区只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。vartmp=123;if(true){tmp=’abc’;//ReferenceErrorlettmp;}上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后…

    2022年6月30日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号