让你提前知道软件开发(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)
上一篇 2022年1月8日 上午6:00
下一篇 2022年1月8日 上午7:00


相关推荐

  • EditPlus正则表达式替换字符串详解

    EditPlus正则表达式替换字符串详解EditPlus的查找,替换,文件中查找支持以下的正则表达式:ExpressionDescription\tTabcharacter.\nNewline..Matchesanycharacter.|Eitherexpressiononitsleftandrightsidematchesthetargetstring.Forexa

    2022年5月13日
    200
  • 八种基本数据类型_uint16是什么数据类型

    八种基本数据类型_uint16是什么数据类型uint8_t/uint16_t/uint32_t/uint64_t 是什么数据类型在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么

    2025年9月30日
    8
  • VB6 动态创建用户控件

    VB6 动态创建用户控件br VB6 有一个新功能 可以动态添加控件 不用控件数组 br br object Add ProgID name container br br 参数说明 br Object 必需的 一个对象表达式 其值是 应用于 列表中的一个对象 br ProgID 必需的 一个标识控件的字符串 大多数控件的 ProgID 都可通过查看对象浏览器来决定 控件的 ProgID 是由控件的库和类组成的

    2026年3月19日
    2
  • 2017双11核心技术揭秘—双十一海量数据下EagleEye的使命和挑战[通俗易懂]

    2017双11核心技术揭秘—双十一海量数据下EagleEye的使命和挑战[通俗易懂]公众号推荐:公众号:VOA英语每日一听微信号:voahk01可长按扫码关注,谢谢

    2022年8月16日
    7
  • 机器学习—最大熵模型(MEM)小结

    机器学习—最大熵模型(MEM)小结当我们想要得到一个随机事件的概率分布时,如果没有足够的信息来完全确定其概率分布,那么最为保险的方法就是选择使得熵最大的分布。

    2022年10月19日
    4
  • CSDN博文标题写作规范文档

    CSDN博文标题写作规范文档为了让小伙伴们更清晰 规范的拟写博客标题 现就博文标题写作规范整理如下 文章标题是对文章内容准确且简明扼要的描述 须做到 避免使用冗长的标题 避免关键词堆砌 字数在 5 30 个汉字为最佳 避免使用模糊和不相关的描述 文章内容需真实有效 避免名不符实 杜绝文章标题和内容不相符情况 甚至出现欺骗 诱导用户点击行为 比如说标题中写了可下载某软件 但是文章内容并未提供下载 避免关键词及

    2026年3月26日
    2

发表回复

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

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