数据移植的核心在数据,从数据的角度来看,数据是最小的操作对象(who),它有其所属的类型(what);以及在数据库中有其存放的位置(where),这个位置可以通过数据库、数据表、字段、行来定位;数据会在适当的时候(when)被定义、操作以及控制(how);而对于特定的数据库,数据的定义、操作以及控制都需要遵循一定的规则,即SQL语法(why),如图29 所示。
图29 数据库中的“5W1H”
在数据的整个生命周期中,SQL语言都贯穿始终。SQL语言因其简洁、高效、更接近人类自然语言而被称为第四代语言(4GL)。当操作数据时,SQL语句用来告诉系统要去做什么。5W1H作为管理学中的一种分析方法,可以语义完备地对目标计划进行分解。因此SQL语句中的数据要素可以根据5W1H来进行组织。
(1)WHO:操作的目标对象,可以是数据、数据表、数据库、索引、存储过程等。
例如,创建数据库Student的SQL语句是“create database student”,在这条语句中数据库Student便是这条SQL语句的目标对象,对应于5W1H中的WHO要素。
图29 中的SQL语句“select@score=usualscore from dbo.score where stuid =20072173”,它表示的意思是从表dbo.score中取出stuid 为20072173 的同学的usualscore数据,并将它赋值给变量score,这里目标对象是usualscore字段中的一个数据。
(2)WHAT:目标对象的属性,它对应于二元组<字段名称,数据类型>。
例如,图29 中的第4 行第4 列的数值“89”,WHAT对应的是该数值所在字段的字段名称以及它所属的数据类型<usualscore,int>。若目标对象是数据表,以图29 中的表dbo.score为例,则此时WHAT对应的是一个由二元组组成的集合:{ <stuid,int>,<stuname,nvarchar>,<stuclass,nvarchar>,...}
(3)WHERE:目标对象所处的位置,可以是数据库,数据表,字段等。
例如,图29 中,SQL语句要查询的是位于表dbo.score中的usualscore数据,即目标对象位于表dbo.score中,这里与WHERE要素对应的是数据表。WHERE要素还可以与字段相对应,SQL语句“create index PersonIndex on Person (Last-Name)”的执行会在Person 表的LastName列创建一个名为“PersonIndex”的简单索引,此时目标对象PersonIndex所处的位置就是表Person 中字段名为LastName的列。(www.xing528.com)
(4)WHEN:目标对象需满足的条件,通常为表达式。
在图29 中,取出的是字段名为usualscore的列中的某个数值,而该数值需要满足一个条件,即在该数值所在的行中,与字段名stuid 对应的数值必须与某个指定的数值相等。也就是说,只有当该行中字段stuid 的值满足某一条件时,才将该行的字段usualscore的值取出,因此成立的条件“stuid =20072173”对应的就是WHEN要素。
(5)WHY:要素组合成SQL语句所需要遵循的规则。
图29 所示的SQL语句中,有三条语法:首先,这是一条查询语句,需要遵循查询语句的语法规则“SELECT column_name1 FROM table_name WHERE column_name2 ops value”;其次,在查询语句的条件表达式中,ops应为数据库支持的操作符;最后,在这条SQL语句中出现了变量score,并在该变量前加上了符号“@”,这是SQL Server中的语法规则,不同的数据库,会有不同的规定。
(6)HOW:针对目标对象执行的操作,既包括SQL中用来满足对数据的各种访问的命令,也包括SQL中对数据进行处理的各种函数。
在SQL语句“select@score=usualscore from dbo.score where stuid =20072173”中,针对目标对象usualscore执行的是查询操作,因此这里与HOW 要素对应的便是select。
之所以要抽取语义要素,是因为虽然不同数据库支持的SQL语法有所不同,但是对于同一个数据库操作而言,尽管在不同数据库下表述方式不同,但是其中所包含的语义要素一定是相同的,如图30 所示。
图30 平台无关的5W1H语义要素
对数据库操作建模就是一个将SQL语句中语义与语法相分离的过程,剥离出来的语义信息是平台无关的,按照平台支持的语法组织后,就可以得到平台支持的操作语句。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。