上一节中,将SQL语句分解成5W1H六个不同的要素,而这六个要素又可以归为三大类:对象、关系和语法。因此,可以从三个方面对SQL语句进行本体建模:
定义27(SQL本体SQL_Onto)SQL_Onto= <Object,Relationship,Syntax>,其中:
(1)Object为数据库中的对象类,包括字段、字段类型、数据表、数据库、索引、视图等,表示的是参与SQL操作的所有对象。
(2)Relationship 为对象与对象之间的关系,包括四种基本关系:属性关系(WHO-WHAT关系)、空间关系(WHO-WHERE关系)、条件关系(WHOWHEN关系)、使能关系(WHO-HOW 关系),如图31 所示。
(3)Syntax为要素WHO、WHAT、WHERE、WHEN、HOW 组合成SQL语句所需要遵循的语法规则。
图31 对象与对象之间的四种基本关系
在第三章中,定义6 给出了概念与概念之间二元关系R(x,y)的定义,该定义同样适用于对象与对象之间二元关系的表示,即存在实体x属于对象O1,实体y属于对象O2,若x与y可以使二元函数R成立,则称x与y之间具有R关系,记作R(x,y)。
(1)对象与对象之间的属性关系hasfield(x,y),hasDataType(x,y),hasDataValue(x,y)...等。(www.xing528.com)
在图29 的示例中,表dbo.score中有若干个字段,字段stuid 是其中之一,它的数据类型是int型,而20072173 是该字段中的一个值,那么hasfield(dbo.score,stuid)表示的是stuid 是表dbo.score中的一个字段;hasDataType(stuid,int)表示的是字段stuid 的数据类型是int型;hasDataValue(stuid,20072173)则表示的是stuid 字段有一个数值为20072173。
(2)对象与对象之间的空间关系locate(x,y)...等。
图29 中,数据表dbo.score位于数据库student中,因此可以用locate(student,dbo.score)来表示,同样,数据表dbo.score中的字段stuid,可以用locate(dbo.score,stuid)来表示,那么这与hasfield(dbo.score,stuid)有什么区别呢? 区别在于locate(dbo.score,stuid)表示要定位的是表dbo.score中的stuid 字段,不是其他表中的,因为不同的表中可能有相同的字段,而hasfield(dbo.score,stuid)仅仅只是表示表dbo.score中有字段stuid,若表dbo.detail中也有字段stuid,那么关系hasfield(dbo.detail,stuid)也是成立的。
(3)对象与对象之间的条件关系equal(x,y),notEqual(x,y),greaterthan(x,y),lessthan(x,y),like(x,y)...等。
对于图29 中的SQL语句“select@score=usualscore from dbo.scorewhere stuid =20072173”,其中“stuid =20072173”为SQL语句查询usualscore时需要满足的条件,用二元关系可以表示为equal(stuid,20072173)。
(4)对象与对象之间的使能关系select(x,y),insert(x,y),delete(x,y),update(x,y),sum(x,y),sub(x,y)...等。
同样以SQL语句“select@score=usualscore from dbo.score where stuid =20072173”为例,如前文所述,该SQL语句是用来从表dbo.score中查询到满足条件的usualscore,这一查询关系可以用select(dbo.score,usualscore)来表示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。