让你提前认识软件开发(36):如何扩展数据表字段?

第2部分 数据库SQL语言

如何扩展数据表字段?

 

【文章摘要】

        在通信类软件中,经常会与数据库打交道。由于需求变化,或者是程序优化升级等原因,对数据表字段进行扩展是常有的事情。这就要求开发人员必须熟练掌握对数据表字段进行扩展的操作流程。

        本文基于作者的数据库方面的工作经验,以实际的SQL程序为例,详细介绍了如何对对数据表字段进行扩展,为相关的开发工作提供了参考。

【关键词】

        数据库  数据表  扩展  SQL  开发

 

一、前言

        在实际的软件开发项目中,对数据表字段的扩展包括如下两个方面:

        第一,对原有字段值的扩展。例如,原表有一个字段“result”,表示结果,之前的取值为0和1,现在要扩展其取值范围,添加一个结果值2。对于此类扩展,数据表的结构不用动,只需要让相关模块知道有这个值的扩展即可。

        第二,新增加字段。即原来表已有的字段不能满足当前的要求,需要新增一个或几个字段,这就涉及到数据表结构的改变。

        本文主要讨论第二种情况下数据表字段扩展的流程和操作方法。本文中的所有脚本都是基于Sybase数据库。

 

二、数据表字段扩展的流程

        对于新增字段的情况,不能通过简单的删除表和重建表来完成,因为在实际的软件运行环境中,几乎每个数据表里面都会有很多的数据。如果不管三七二十一,将表删除了,会导致某些重要数据的丢失,造成极为不良的影响,甚至会引起客户的投诉。

        在实际的软件开发项目中,对数据表字段的扩展流程如图1所示。

图1 对数据表字段的扩展流程

 

三、数据表字段扩展操作示例

        有一个员工信息表,包含了工号、姓名和年龄三个字段,如下所示:

create table tb_employeeinfo

(

    workid    int                default(0)  not null,  -- workid

    name     varchar(50)  default('')   not null,  -- name

    age        int                 default(0)  not null    -- age

)

go

 

create unique index idx1_tb_employeeinfo on tb_employeeinfo(workid)

go

 

print 'create table tb_employeeinfo ok'

go

 

        现在需要在原表的基础之上扩展一个地址(address)字段,用于记录员工的居住地址,该字段可以为空。

        整个字段扩展的执行SQL脚本如下:

-- 第一步: 创建备份表

if exists(select * from sysobjects where name='tb_employeeinfobak')

    drop table tb_employeeinfobak

go

create table tb_employeeinfobak

(

    workid    int                default(0)   not null,  -- workid

    name      varchar(50)  default('')   not null,  -- name

    age       int                  default(0)  not null   -- age

)

go

 

create unique index idx1_tb_employeeinfobak on tb_employeeinfobak(workid)

go

 

print 'create table tb_employeeinfobak ok'

go

 

-- 第二步: 将原表内容插入到备份表中

insert into tb_employeeinfobak(workid, name, age) select workid, name, age from tb_employeeinfo

go

 

-- 第三步: 将原表删除掉

if exists(select * from sysobjects where name='tb_employeeinfo')

    drop table tb_employeeinfo

go

 

-- 第四步: 创建新表

create table tb_employeeinfo

(

    workid       int                 default(0)  not null,    -- workid

    name        varchar(50)   default('')   not null,    -- name

    age          int                 default(0)  not null,     -- age

    address   varchar(100)                        null     -- address

)

go

 

create unique index idx1_tb_employeeinfo on tb_employeeinfo(workid)

go

 

print 'create table tb_employeeinfo ok'

go

 

-- 第五步: 将备份表内容插入到新表中

insert into tb_employeeinfo(workid, name, age) select workid, name, age from tb_employeeinfobak

go

 

-- 第六步: 删除备份表

if exists(select * from sysobjects where name='tb_employeeinfobak')

    drop table tb_employeeinfobak

go

 

        经过以上六个步骤,即实现了对数据表的字段扩展,并且原来的数据也没有丢失。

 

四、总结

        本文以实际的SQL脚本为例,详细介绍了对数据表字段进行扩展的整个流程,为相关软件开发活动的开展提供了有益的参考。

 

 

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

 

时间: 2024-09-16 19:51:42

让你提前认识软件开发(36):如何扩展数据表字段?的相关文章

提前认识软件开发(1) 序言

序言 正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程. 1.为什么要写作本系列? 在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要. 在学校里面,我们欠缺的教育主要包括以下方面: 第一,对编码规范的要求.计算机编程课上,老师只要求学生能够编写程序实现既定的功能即可,几乎不会对编码规范提出要求,

让你提前认识软件开发(1):序言

序言           正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程.          1.为什么要写作本系列?        在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要.        在学校里面,我们欠缺的教育主要包括以下方面:        第一,对编码规范的要求.计算机编程

提前认识软件开发(32) 数据库索引

索引在数据库中占有非常重要的地位,它是对数据库表中一列或多列的值进行排序的一种结构.正确使用索引,可快速访问数据库表中的特定信息,进而提高数据库脚本的执行效率. 1. 索引分类 数据库表中经常有一列或几列的组合,其值唯一地标识表中的每一行,该列称为表的主键. 在数据库中,将索引分为三类:唯一索引.主键索引和聚集索引. 唯一索引是不允许其中任何两行具有相同索引值的索引,即索引列的值不允许重复. 主键索引是唯一索引的特定类型,该索引要求主键中的每个值都唯一. 在聚集索引中,表中行的物理顺序与键值的逻

让你提前认识软件开发(32):数据库索引

第2部分 数据库SQL语言 数据库索引           索引在数据库中占有非常重要的地位,它是对数据库表中一列或多列的值进行排序的一种结构.正确使用索引,可快速访问数据库表中的特定信息,进而提高数据库脚本的执行效率.   1. 索引分类         数据库表中经常有一列或几列的组合,其值唯一地标识表中的每一行,该列称为表的主键.         在数据库中,将索引分为三类:唯一索引.主键索引和聚集索引.         唯一索引是不允许其中任何两行具有相同索引值的索引,即索引列的值不允许

提前认识软件开发(33) 数据操纵语言(DML)

数据操纵语言(Data Manipulation Language,DML)包括insert.delete和update语句,用于增.删.改数据. 本文用以下的表tb_employeeinfo作为例子加以说明: create table tb_employeeinfo ( employeeno varchar(20) not null, -- 员工工号 employeename varchar(20) not null, -- 员工姓名 employeeage int null -- 员工年龄

提前认识软件开发(16) 如何对程序进行优化

对程序进行优化,是软件开发工程师必然会涉及到的问题.那么为什么要对程序进行优化呢?原因有以下几个: 第一,在原程序基础之上新增.删除或修改了功能,需要改变原程序流程.客户需求随时可能会变化,今天已经实现的功能,说不定明天就要修改或去掉.落实到程序上面,就需要我们随时准备对写好的代码进行修改,而不要奢望写好之后就永远不要动了. 第二,原程序有bug.这类情况出现得非常的频繁,很多软件有1.0.2.0.3.0等版本,部分原因就是前面版本中程序有问题,在修改程序的过程中使得软件版本不断升级. 第三,原

让你提前认识软件开发(22):shell脚本中的文件操作

第1部分 重新认识C语言 shell脚本中的文件操作   [文章摘要]         编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令.        本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. [关键词]        shell  文件操作  读写  效率   一.概述         在

让你提前认识软件开发(47):同行评审

第3部分 软件研发工作总结 同行评审            在<浪潮之巅>这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格.         吴军老师所描述的内容,其实就是软件开发中的同行评审流程.         几乎在所有的软件项目中,都需要同行评审.一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等定不会是十全十美的.如

提前认识软件开发(2) 软件开发工程师常用的工具软件

有一次,我打开电视机准备随便看看,无意中被一部战争片吸引住了.成千上万的共产党战士搭起云梯,想攻破一座城池.但是城楼上面的敌人负隅顽抗,拼了命地阻击我军的进攻.双方的伤亡都很惨重,但城就是攻不下来.眼看我军剩下的人不多了,突然不知从什么地方开出一辆坦克,两炮就把城门轰开了.我军趁势攻入城中,将敌人全部歼灭了. 这类电视剧比较常见,相信大家看了不止一次.但是,我看完之后,那个场景还一直留在我的脑海里.成千上万的人不如一辆坦克来得直接,说明了什么问题呢?我立马想到了一句古诗:工欲善其事,必先利其器.