没有合适的资源?快使用搜索试试~ 我知道了~
制作和主办:Elsevier沙特国王大学学报基于UML/OCL的双时态对象关系数据库Soumiya Ain El HayatSunday,Fouad Toufik,Mohamed Bahaj摩洛哥哈桑第一大学科技学院LITEN实验室阿提奇莱因福奥文章历史记录:2018年11月11日收到2019年8月12日修订2019年8月25日接受在线预订2019年8月27日保留字:UMLOCLTORDB双时态数据A B S T R A C T在软件建模中,UML(统一建模语言)越来越受到软件开发中实时系统时态数据库的出现要求新的可视化、高效的建模技术来方便时态对象的设计。尽管UML目前还没有能力管理这一任务,但UML和扩展扩展提供了有限的手段来表达时变数据和时态对象动态行为上的时态约束。因此,对象约束语言(OCL)在阐述正确的概念模式中起着重要的作用,该模式允许定义包含重复和复杂表达式的约束和约束。在本文中,我们提出了一个UML扩展丰富的OCL功能和双时态维,以提高UML/OCL模型的可理解性,并支持时间属性及其演变的能力本文提出的基于双时态数据的时态UML/OCL将被转换为时态对象关系数据库中的相应对象,以有效地跟踪历史信息。本文提出了一种算法,通过分类和提取类、关系和属性等信息,实现了从含有双时态特征的概念模式到时态对象关系数据库模型的自动转换。©2019作者制作和主办:Elsevier B.V.代表沙特国王大学这是一CC BY-NC-ND许可下的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。内容1.导言. 3992.相关作品3993.建模UML/OCL并将其转换为时间对象关系数据库400的过程3.1.用UML/OCL设计时态数据库4003.2.从Class_schema迁移到TORDB模型4013.2.1.Class_Schema 401的标识3.2.2.TORDB模型402的定义4.OCL规范和TORDB 4034.1.OCL规格4034.1.1.Bitemporal_Period 404的枚举4.1.2.Valid_Time_Start NOTNULL 4044.1.3.交易时间的默认值4.1.4.有效时间间隔上的OCL表达式404*通讯作者。电子邮件地址:soumya. gmail.com(S. Ain El Hayat)。沙特国王大学负责同行审查https://doi.org/10.1016/j.jksuci.2019.08.0121319-1578/©2019作者。制作和主办:Elsevier B.V.代表沙特国王大学这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表沙特国王大学学报杂志首页:www.sciencedirect.comS. Ain El Hayat et al./沙特国王大学学报3994.1.5.带有Implies运算符的OCL表达式4044.2.OCL规范到TORDB 4044.2.1.创建Bitemporal_Period对象4044.2.2.在插入之前创建触发器(Implies运算符的转换)4054.2.3.实验性研究4065.结论406第406章利益冲突参考文献4061. 介绍时变数据管理是近几十年来信息技术的重要组成部分存储时间是表征属性的最必要的属性之一即使在今天,大量的数据库系统也是基于时间的本质,通过记录数据库的活动及其随时间的变化来因此,需要保留跟踪和审计对数据所做的更改以及基于过去或未来假设进行计划的能力是时态数据的重要用例(Kaufmann等人, 2014年)。时态数据库的文献提供了支持时变数据的树维:有效时间段、事务时间段和支持两者的双时态数据。这就是为什么建模机制必须适应于实现管理时变数据的概念模式,以便将来自现实世界的时态数据表示为对象。概念模式通过使用面向人类的自然语言表示数据库表及其关系的抽象定义,独立于任何实现,尊重清晰性和简单性标准(Fouad和Bahaj,2018)。一个概念设计层次包括类的分类及其属性、关系和约束集域的状态,它标识模式的每个实例必须满足的条件。然而,几种面向对象的分析和设计方法带来了大量的语言来支持应用程序开发过程的许多规范。UML是一种行业标准语言,用于指定,可视化构建和记录软件系统(Hidayat和Utomo,2016)在其生命周期的不同阶段其广泛使用的主要原因是UML具有非常丰富的建模过程的符号。为了保证模型的质量,一个概念模式是由UML图工具表示的图形,和一组复杂的约束,通常在OCL中表示为不变的对象模型。OCL的主要目标是用UML无法表达的附加信息和约束来扩充模型本文的目的是定义一个映射规则,并给出将UML/OCL转换成处理双时态数据的时态对象关系数据库(TORDB)的基本步骤我们提供了一个精确的概念模式(UML/OCL)表示时态数据库系统处理双时态数据。此外,我们将定义语法和语义的OCL约束表示复杂的约束依赖于时间。建议的UML/OCL是时态数据库约束(如触发器和构造器)中任一个的概念级转换,也可用于实施复杂的完整性约束。此外,原型的创建是在Oracle上进行的,以验证我们的解决方案。本文的结构如下。第二部分介绍了相关的工作。在第3节中,我们展示了如何将一个已经存在的UML类图用OCL约束进行扩充,并将其转换成TORDB。与时间相关的OCL表达式的定义最后给出了TORDB的特征及其对应关系2. 相关作品重要的研究已经处理了不同层次的建模和数据模型之间的转换:概念和逻辑。在(Cabot等人,2008)提出了一个系统的过程,用于将由OCL注释形成的UML类图转换为约束满足问题(CSP),以提供关于UML/OCL的一组预定义的正确性属性。在概念层面上,在OCL-Lite的范围内对任意约束进行识别和规范,以确保推理的完整性和正确性(Queralt等人,2012年)。Gogolla和Hilken介绍了使用工具的模型验证器,这是一个基于关系逻辑实现的UML和OCL的现代实例查找器,旨在帮助开发人员发现模型描述中的错误(Gogolla和Hilken,2016)。Maciaszek和Wong定义了基于UML的对象关系数据库开发所需的设计结构,并提出了从设计模型到对象关系实现的映射方法(Maciaszek和Kin-shin,2000)。Gupta和Rupta介绍了UML图的正式规范,并由OCL指出,这些图由Java实现(Gupta和Rupta,2017)。(Kuhlmann等人,2013)专注于开发和分析基于mprole的访问控制策略,使用基于UML的领域特定语言和OCL实现约束语言。Kosiuczenko提出了一个新的和更详细的不变性规范及其在基于有序存储代数和数据库理论的约简视图的背景下的研究(Kosiuczenko,2013)。Knapp等人(2016)开发了一个基于异构方法不同机构的UML状态机框架。在(Massoni等人,2004)提出了一种基于精确语义的UML类图自动分析方法,该方法使用Alloy工具,通过约束求解来识别关键软件的欠规范模型。在(Ain ElHayat和Bahaj,2017)中讨论了使用UML行为图的系统建模,他们在其中展示了UML和OCL建模工具的新功能。Golobisky和Vecchiesti在(Golobisky和Vecchietti,2005)中提出了将UML转换为对象关系数据库的形式化映射步骤,从UML类图表示的概念模式开始。另一方面,在(Chau等人,2008年)亲-提出了一种时态对象关系SQL语言,在时态透明环境中操作属性的有效时间。(Chau等人,2007年,2007年)提出了一个数据库应用程序开发环境的时态和非时态使用SQL:2003以下的属性时间-时间。Atay提出了一个基于时间戳的双时态数据模型的区间属性和元组之间的比较,并通过提供相同的数据和400S. Ain El Hayat et al./沙特国王大学学报对这两个概念的相同查询(Atay,2010)。根据这种比较,Petkovic在(Böhlen等人,2017)给出了在关系数据库管理系统中存储、管理和处理时态数据所获得的结果和技术的概述。Ain El Hayat和Bahaj的方法是将基于SQL:2011的时态关系数据库转换为包含不同时间特征的时态对象关系数据库,并考虑了几种处理这种迁移的方法。本文给出的TRODB的定义与我们以前的工作相似。相反,我们将为每种关系分类标识时态对象表。总之,许多研究都致力于分析和正确性的UML形成与OCL符号。我们注意到,时态数据库的特点被忽视,时态数据的一些语义概念,特别是在概念层面上没有考虑在许多工作。在文献中提出的大多数以前的工作失败,因为他们没有提供一致的迁移形式化,使这些映射可以自动化的设计与OCL规范,可以用来生成TORDB模型。从OCL丰富的概念图式转换的方法并不多见。我们的结论是,这些以前的研究没有提供一个解决方案,允许开发一个全面和精确的建模的时态数据库,并从UML和OCL技术提供的优势,随时间变化的数据管理设计的收益。我们的目标是使用UML规范及其约束语言OCL来处理时态对象关系数据库表示的表达概念模式。该方案将为今后在这方面的研究和工作提供具体参考。我们提供了我们的解决方案,结合现有的方法与时态数据特征的几个结果,并应用我们的增强使用Meta模型的方法。我们定义的语法OCL表达式表示的复杂的约束,这是依赖于双时间维。建议的约束将被转换为数据库中的等效约束。此外,本研究提出一种UML/OCL设计,从UML类图中标注OCL(UML/OCL)来定义实体集和限制,为规范化提供新的表征为了对类图的时态属性进行操作,对时态对象关系数据库进行有效的描述。实现了一个原型系统,提出了一种从UML/OCL模型生成TORDB模型的算法,并将OCL规范转化为完整性约束、触发器和构造器来处理复杂的约束。3. UML/OCL到时态对象关系数据库的建模与转换过程在本节中,我们描述了如何将UML转换为UML/OCL作为一种新的Meta模型,为创建和分析时态系统提供了一种有前途的方法。这是通过向我们的UML类图添加一些OCL约束来实现的,以便为我们的概念模型提供一些正确性属性。其次,定义了所需的OCL约束,以指定UML模型中无法表达的时态属性的约束和业务规则。最后,我们将展示OCL表达式到TORDB中的等价物的翻译。3.1. UML/OCL在时态数据库设计中的应用UML是一种异构语言:UML包括几种类型的结构和行为性质的图,以提供信息视图。此外,它提供了一个系统作为一个整体,并显示如何不同的实体是相互关联的。UML允许描述功能、静态和动态模型以及系统随时间的一系列变化。此外,UML提供了一些机制,可以定义新的建模元素,并将信息与新的建模元素相关联(Hayat和Bahaj,2017)。这是用于描述一个特定的领域,通过集成标记值,原型和约束语言来增强。因此,UML已被广泛用于软件和数据库设计过程中的逻辑和概念模型。在本文中,我们集中在UML类图来描述我们的系统,并根据UML/OCL方面创建新的设计。类图表示面向对象的应用程序结构的静态视图,并包括许多要根据系统需求建模它由类、属性、操作、约束组成;图1.一、银行管理的图表类S. Ain El Hayat et al./沙特国王大学学报401图二、UML/OCL银行管理概念设计可以建立类之间的关系,例如聚合、关联、组合和继承。考虑图1中的类图。1.一、给出了银行系统管理中包含双时态数据的类该模型将用于本文中的示例。虽然类图是概念和逻辑模式的一般用途,但它对于某些应用程序有一些限制,这些应用程序在属性级别处理时态数据库特性为此,有必要开发一种新的模型,基于图类,并形成了有限的OCL约束,描述时态数据库操作建模,促进可视化的导航路径,并定义所有可能的轨迹之间的对象之间的交互通过使用对象约束语言中指定的附加 约 束 来 丰 富 该模 型 该 模 型 允 许 我 们 开 发 添 加双 时 态 数 据 的UML/OCL模型,这使得理解时态数据库的结构和构造模式转换成为可能,从而促进转换过程到时态对象-关系数据库。3.2. Class_schema到TORDB模型在本节中,我们将概述将方法从类图转换为TORDB的基本阶段。首先定义了类模式,对应于TORD模型。模型提取阶段将类模式及其关系转换为具有双时态数据的结构化类型的等价集合3.2.1. Class_Schema的标识图 1展示了UML类图对银行系统进行建模,这个模型包含了实现本工作目标所需的所有概念和信息。虽然类图有几种技术和元素用于建模时态数据库系统,但我们选择了数据库中最常用的,可以指定相关实体,它们的属性和它们的关系。的定义的UML类图的元素,目的是将其转换成一个时间对象关系模型(TORDB_Model),其特征在于以下表达式:一个类可以定义为:C_Schema ={C| C=(Cn,A,S_class,REL,O,Bit_P,PK)},其中402S. Ain El Hayat et al./沙特国王大学学报SSS● Cn =类● A =表示一组类属性A= {An,T}每个属性都有一个名称An,T是属性的类型。REL =类C参与的关系,其中每个类C与其他类具有一组关系REL={REL |REL =(RelType,DirC,mp)},其中RelType表示一种关系类型,它支持四种类型:关联、聚合、组合和继承。DirC是类C'的名称,MP表示多重性,用于标识属性是单值还是多值。O:定义一组操作S_class =表示继承关系中的超类名称● Bit_P:双时态元素每个时间类通过添加可以具有以下值的Bit_P来指定双时间维度:Bit_P ={(vt-start,vt-end,TT_start,TT_end)}。关联:关联是两个或多个类之间的链接。它RelType=“Associat with”的类定 义 如 下 : C_A= {C| C=(Cn,AT,“Associat with”,C'n,mp,Bit_P,O,Pk)}其中:Cn是分配给类的名称; AT是类的属性的有限集合聚合:聚合关系是一种二元关联,它指定了整体-部件类型的关系[自动化基础],其中部件是可共享的,并且独立于整个类。因此,具有聚合关系的类可以由以下表达式定义:C_AG= { C| C=(Wn,AT,“aggregation”,Pn,mp,Bit_P,O,Pk)}其中:Wn是由0..组成的整个类的名称。n个部分类P的对象,AT是整个类的属性的有限集合,Pn是其对象组成类整体的部分的名称组合:它是一种特殊的聚合,其中部分元素物理上包含在整体中。组合关系是一种非共享的关联,它标识了整体-部分类型的关系,但这种关系比聚合更强,因为部分生命依赖于整体存在。该组合物可定义如下:C_C={C| C=(Wn,AT,“iscomposite”,Pn,mp,Bit_P,O,PK)}继承:继承是非常重要和容易的类型之间的关系更一般的类的层次表示超类和较低的类在层次称为子类。继承关系的形式表示为:C_I= { C| C=(SCN,AT,“ihnerit”,SPC,Bit_P,O,PK)}其中:SPC表示超类名,SCN表示子类名。3.2.2. TORDB模型在我们之前的工作(Kulkarni和Michels,2012)中,我们提出了由TORDB模型组成的不同元素,该模型提供了对时态对象关系数据库所得到的TORDB模型被定义为一组基于结构化类型ST和时态结构化类型TST的时态类型表,用于存储数据。每个TST由一组简单属性和变化的时间属性组成。在本文中,可变时间属性可以是一个双时态属性,它实际上存储在一个嵌套表中作为一个集合类型。TORDB模型的定义表示为三元组:TORDBModel={TT| TT=(TTs,STs,Tm)}其中:TT s是时态和非时态类型表的集合,ST s是时态结构化类型或简单类型表的结构化类型,Tm是随时间变化的周期。集合TT、ST和Tm定义如下:STs ={Sn,S,AT},其中Sn是结构化类型的名称,S是ST的超类型,AT是结构化类型的属性集AT={A| A:={N,T,D,NL,BitT,M}},其中N:是属性的名称,T:表示数据类型,可以是原语、UDT或引用。NL:属性是否接受NULL。D:默认值。M:表示AT是单值还是集合值。BitT:表示属性是否包含定义的双时态属性:BitT={(AT 1,AT 2,,TTL,VTU,TTU)}。● TTs={typedtable| Ttable={TTn,STn,PK,Tp}}其中:TTn是类型化表的名称,STn是定义TT所基于的结构化类型的名称,PK:主键,TP:意味着TT是否是临时的。关联:对于每个关系Rel,其中RelType=TT_Association = {TT| TT= ( TTn, STn, AT NT (Ref ( ST')),PK,Bit_P)}在与关联类的关系中,我们提出了一种方法来维护结构化类型ST'的引用类型,该引用类型引用聚合:RelType=“Aggregation”的每个关系Rel被映射为表示参与与类C的关系的C“类的UDT(用户定义类型)的集合。TT_聚合= { TT|TT=(TTn,STn,ATNT(UDT(ST')),PK,Bit_P)}组合:每个关系rel,其中RelType =“composition”被转换为类型为嵌套表的属性,存储与类部分C“对应的ST”的属性。TT_组成={TT| TT=(TTn,STn,ATNT(ST '),PK,Bit_P)}继承:每个关系rel,其中RelType =“继承”,类C'继承其对应于ST'的超类的所有属性。为了创建表示继承关系的结构化类型,我们使用关键字UNDER在对应于子类C的ST的创建期间。TT_inheritance ={TT| TT=(STn,ST.AT S Super_T.AT,PK,Bit_P)}3.2.2.1. Class_schema到TORDB模型的转换算法。在分类和提取关于不同类、关系和属性的基本信息之后,我们提出了一种算法产生TORDB模型来自动化转换过程,C_Schema到TORDB模型。类和属性提取和转换●●●●S. Ain El Hayat et al./沙特国王大学学报403SSSS输入:C_schema输出:TORDB模型开始ST,ST_M,TP,RelType:string:=则ST.AT.BitT = C.BitPTP=EndIfST = C.CnForeach属性Ae C。C_schema do如果A.An!= PK然后ST.AT.T = mapType_ORDB(A.T)EndIfEnd For我们开始的转换过程中,以概念模式(CS)作为输入,在我们的工作中提出的CS表示一个UML类图,其中包含一组的类和属性连接的关系和丰富的时态数据功能。第一步是以概念模式中的每个类为对象,提取其元数据信息,包括双时态数据、类名、属性属性(Name、Type、是否命名、数据长度)以及表示数据依赖关系的主键,这些信息在模式转换过程中起着非常重要的作用。然后,算法在TORDB模型中生成它们的等价物,并保持C模式中列出的相同名称,将'_T'添加在时态对象关系数据库中标识表。关系提取和转换EndForEndFor返回(TT,ST,TP)结束算法一个有效的C模式的建设克服了复杂性和困难,可能会发生在匹配的关键字,以分类的关系。在完成了类和属性提取的第一步之后,我们捕获了部分关系;在我们的算法中,我们覆盖了所有类型的关系(聚合、组合、继承、特殊化和简单关联)这一步使用导出的键获取每个关系,我们将键与其引用连接起来,目的是确定当前类与它们交互的类。此外,基数的定义,以简化转换过程。为了表达尽可能多的语义,并给出一个完整的转换过程,所提出的模型已考虑到我们以前的工作中提供的规则,这对于- malize必要的,可以帮助我们转换每个关系到它们的等价物在时态对象关系数据库。4. OCL规范和TORDB在一个高层次的抽象中,UML在软件和数据建模中起着关键作用。尽管UML已经发展成熟,但它不足以表达数据的所有特征,特别是数据的行为,这就是为什么使用OCL(对象约束语言)。OCL是一种自然的综合语言,是UML标准的一部分,可以与任何对象管理组(OMG)Meta模型一起使用。使用OCL来描述约束和限制,使我们有可能加强和丰富我们的UML类图,并允许我们为许多RDBMS供应商使用一个数据模型。当使用SQL直接与UML,在这里我们合并的概念模式与物理模式,我们失去了权力,使通用的连接,概念图式,它代表不同的物理图式,Foreach Relationship Rle C.Rel doC '= getRel(Rel.DirC)如果C.mp =(('1,1.. N ')||('1.. N,1... N’))ST.AT.M= '收藏价值'ST.AT.M=如果Rl.RelType=ST.AT = ST.ATEndIf如果Rl.RelType=ST.AT = ST.AT{‘NT(UDT_C’)’+AddConstraint(D,N) +EndIf如果Rl.RelType=ST.AT = ST.ATEndIf如果Rel.RelType =TT.TTn = C.SCNST.Super_T = C.SPCST.AT = ST.AT(D,N)}EndIf不同的供应商(Oracle RDMS、Microsoft SQL Server)。本节介绍了一些OCL表达式,这些表达式必须适用于被良好建模的系统,并将其转换为由时态对象关系技术表示的逻辑建模。接下来,我们将用匹配的OCL子句描述一些限制。确定性约束将通过不同类型的约束(触发器、完整性约束、触发器)来表示,以控制对变时数据的访问和存储转换成时间表4.1. OCL规格OCL是一种高级语言,用于规定面向对象系统的契约它是一种声明性的文本语言,用于表达和描述面向对象模型上的复杂约束。它是与UML标准相关联的面向对象分析和设计操作中常见的复杂系统等问题。而OCL在为面向对象的应用程序建立UML模型时,为对象属性的显式比较和业务规则的自动处理提供了机会。OCL最重要的优点是导航和属性访问,这涉及到OCL的表示,并将值放在一个具体的模型中。更正式地说,OCL约束可以通过不同类型的规格说明来限制UML标准的静态方面。OCL表达式连接到上下文404S. Ain El Hayat et al./沙特国王大学学报课提出的约束在UML/OCL设计中以适当的语法表示,并与上下文元素相连接,以表达对变化时间属性的约束和维护系统行为的需求。 我们通过简单和复杂的约束扩展了图1中的示例UML模型,这些约束定义如下:4.1.1. Bitemporal_Period的枚举UML模型中定义的枚举必须在OCL约束中表示。每个枚举都定义为一个特殊的无论是在过去现在还是在未来的开始和结束时间。因此,有效时间规范的另一个要求是将开始时间属性和结束时间属性组合起来形成一个周期。周期用于表示时间间隔,具有上限值和下限值。插入期间时,用户必须指定有效时间值,以指示有效时间开始不得为空。因此,有效时间结束保持大于有效时间开始值的上限下面的OCL表达式定义了有效时间范围的内容限制(VT_Start =VT_End)。数据类型,并相应地具有类型名称和值名称。我们使用枚举约束将对象的内容限制为一组可接受的属性。下面的规范定义了一个名为bitemporal_Period的元素,其中唯一允许的属性是valid time start 、 valid time end 以 及 transaction time start 和transaction time end。下面的OCL表达式定义了一个双时态数据对象,用于指定时变属性:上下文客户库存:NOT self.bit_period. VT_Start.ocllsUndefined()AND(self.bit_period. VT_Start = self.bit_period.Vt_End或self.bit_period.Vt_End.ocllsUndefined())context Bitemporal_Period inv:self.bitemporal_Period = bitemporal_Period::VT_start或者自我。bitemporal_Period = bitemporal_Period : : VT_end 或 self 。bitempo- ral_Period = bitemporal_Period : : TT_start 或 self 。bitempo- ral_Period = bitemporal_Period::TT_end4.1.2. Valid_Time_Start NOT NULL上面的图2显示了时态对象关系方法中的银行系统关系。每个类都有双时态维度,其中包含表示类有效期的Vt_Start和Vt_End属性为了方便起见,我们假设在有效时间维度中没有空值。NOT NULL约束强制一行始终存储一个值。添加的限制意味着如果不在双时态数据对象的vt_Start属性中添加值,则不授权数据的插入或更新操作。为了用OCL表示这个约束,我们创建了一个使用方法ocllsUndefined()的不变量,如果值为NULL,则返回true。以Adress_Customer类的Vt_Start属性为例,该属性必须为“Not”。相应的OCL表达式如下所示:上下文地址_客户发票:NOT self.bit_period.vt_start.ocllsUndefined()4.1.3. 事务处理时间对于任何给定的时间属性,其事务时间可以任意地不同于其有效时间,其中事务时间是指示信息在系统中是活动的时间。存储到事务时间维度中会自动设置system_start的值,该值是与每次插入相关联的特殊值,并将事务时间的插入值设置为最高值(“31/12/9999”)。与有效时间相反,不允许用户分配或更新事务期间界限的值。更准确地说,事务时间开始在插入新数据期间存储默认的sysdate值定义事务启动(TT_Start)的OCL表达式,将Sysdate作为默认值。ContextBit_period : : TT_Start :dateTimeinit:date.now()事务结束(TT_End),默认值ContextBit_period : : TT_End :dateTimeinit:'30/12/9999 04.1.4. 有效时间间隔的OCL表达式有效时间段旨在满足对捕获时间段感兴趣的系统的要求,在该时间段内,数据被认为在真实世界中是有效的[23]。一个主要的要求是用户能够分配任何时间值,4.1.5. 带有Implies运算符的考虑图1中的类帐户。它显示了帐户和余额类之间的比较关系,其中记录历史金额的帐户和余额的时变信息在每次交易中被捕获和更改。在这两个类中,每个时间段表示一个clo- sed_open间隔。在排除有效时间的情况下包括有效时间开始在这个例子中,我们处理在任何事务操作之前插入新余额记录的问题。预金额(金额>= 2000)指定相应余额值的下限。在平衡类的有效时间段内分配的每个值必须遵守一些限制,这些限制可以在OCL中以以下方式指定:下面的OCL约束确定余额和帐户表的有效时间限制。余额的有效起始时间必须小于account的值,两者另一方面,account和balance类的有效时间结束值遵守前面示例中描述的限制上下文余额inv:self.bit_period.valid_time_start >=self.account.bit_period.valid_time_start AND(self.bit_period.Vt_End =self.account.Vt_End或self.bit_period.Vt_End.ocllsUndefined()隐含self.account.bit_period.Vt_End.ocllsUndefined()4.2. OCL规范到TORDB的转换下面的示例提供了一组SQL查询和过程,以演示将上一节中提供的OCL规范转换为具有双时态数据的对象关系数据库的过程。为了更好地理解我们的方法是如何工作的,我们以下面的方式给出一些例子:4.2.1. 创建Bitemporal_Period对象构造函数用于初始化一个对象。定义复杂的业务规则来强制执行复杂的约束是非常重要的。在实践中,需要S. Ain El Hayat et al./沙特国王大学学报405在我们的方法中实现构造函数是为了定义约束,这些约束在前面的小节中被指定用于处理双时态周期。在这个构造函数中,我们确定了事务时间段的默认值(TT-start,TT-End),并指定了NOTNULL要求,以强制一行始终在有效的时间维度中存储一个值,以避免NULL值。此外,该约束被标识为控制在插入操作期间必须大于VT-Start的Vt _End因此,构造函数bitemporal_pe- riod在每次创建表时都被调用,并且在插入新元组期间验证有效和事务时间段的有效性,还控制对时态对象关系表的数据访问该解决方案是最通用的,并且满足上述要求。创建或替换类型主体bitemporal_period作为连接器函数bitemporal_period(vt_start Date,vt_end Date,tt_endDate)返回结果开始如果vt_start为空,则RAISE_APPLICATION_ERROR(-20343,返回;结束条件:如果vt_end不是NULL,则如果vt_start> vt_end,则RAISE_APPLICATION_ERROR(-20344,返回;结束条件:结束条件:SELF.vt_start:=vt_start;SELF.vt_end:=vt_end;SELF.tt_start:= TO_DATE(sysdate返回;结束语:结束语:/下面的查询定义了对象类型bitemporal_Period,用于指定随时间变化的属性。所有包含双时态特征的时态对象关系表都是用四个附加列创建的 ( VT_start 和 VT_end 列 定 义 有 效 时 间 数 据 的 下 限 和 上 限 , 而TT_start 和 TT_end 分 别 表 示 事 务 时 间 数 据 的 下 限 和 上 限 ) 。Bitemporal_Period使用前面的构造函数来定义系统行为。使用Bitemporal_period对象和包括Bitemporal_period构造函数创建Customer、Loan和account表以及所有必要的辅助(对象)类型。示例1:创建或替换类型Customer_T作为对象(id_cust Number,name_cus varchar(20),phoneNumber,customer_hbit_period);Create Table customer OF Customer_T NESTED TABLEcustomer_h STORE AS customer_tab);创建或替换类型Loan_T作为对象(Loan_NO Number,金额数字,类型varchar(20),Loan_Hbit_period,客户REF customer_T)创建表Loan_table OF Loan_T嵌套表Loan_H STORE AS loan_tab;客户创建或替换类型Balance_Type作为对象(value_b Number,Balance_Hbit_period);创建类型balance_T是Balance_type的表; AccountCREATE TYPE account_type AS对象(acc_no NUMBER,acc_type varchar(20),Customer REF customer_T,Balance balance_T,account_h bit_period);CREATE TABLE account_table of account_type NESTED TABLEaccount_h STORE AS account_tab NESTED TABLE BalanceSTORE AS balance_tab(NESTED TABLE Balance_H STOREAS balance_h_tab);创建或替换类型Transaction_Type作为对象(transm_ID编号,类型_Transvarchar(20),数量,账户REF account_type,Transaction_hbit_period)NOT FINAL;创建或替换类型Transfer_Tpe UNDER Transaction_Type(target_source varchar(20));CREATE TABLE transaction_table of Transaction_type NESTEDTABLE Transaction_h STORE AS transactionh_tab;4.2.2. 在插入之前创建触发器(隐含创建或替换类型bitemporal_period作为对象(vt_start Date,vt_endDATE,tt_startDATE,tt_endDATE,CONVERCTOR FUNCTION bitemporal_period(vt_start Date,vt_end Date,tt_end Date)RETURN SELF AS RESULT);CREATE TYPE bit_period IS TABLE OF bitemporal_period;我们使用Oracle的嵌套表的概念来创建具有双时态列的时态对象关系表。实施例1示出了操作员)在平衡类中应用OCL规范将被转换为触发器,触发器将用于实现跟踪对象关系数据库中的平衡表的状态,并记录系统行为,以便在插入新值时能够操作我们创建了一个触发器,当在余额表中插入之前发生某些事件时,该触发器将自动触发因此,在对象关系数据库中,有必要将所有可能的触发器定义为OCL表达式,以处理变化的时间数据,因为触发器合并在SQL查询和Oracle中实现的过程代码以下示例显示了上一小节中给出的OCL表达式的转换406S. Ain El Hayat et al./沙特国王大学学报示例2:在插入余额表之前创建触发器:创建或替换触发器insertNewBalanceRecord每一行的平衡表当(新金额>= 100)延期时account_balanceNUMBERBEGIN选择account_bl到account_balance from account_tablewhere(id =:new.id);IF(:new.amount > account_Balance)THENRAISE_APPLICATION_ERROR(10266,更新帐户表set balance = account_bl -:new.amount; END;4.2.3.实验研究传统的SQL语句为设置有效列和事务时间段列的初始值提供了足够的支持。示例3显示了一个SQL语句,它在帐户表中插入这条语句在这里只是为了展示如何插入时态行,其中每个表可以根据需要有任意多的元组来表示双时态属性。示例3: 输入account_table VALUES(1,(c)从客户c取得,其中c. id_cust =1),balance_T(Balance_Type(2345,bit_period(bitemporal_period(TO_DATE在下面的示例中,我们使用select语句来展示如何检索存储在帐户表中的所有信息,以验证我们的解决方案。我们可以将查询表示为:实施例4: 选择两个日期之间的余额值和'03/05/2017 0 一个给定的客户:选择c.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 利用迪杰斯特拉算法的全国交通咨询系统设计与实现
- 全国交通咨询系统C++实现源码解析
- DFT与FFT应用:信号频谱分析实验
- MATLAB图论算法实现:最小费用最大流
- MATLAB常用命令完全指南
- 共创智慧灯杆数据运营公司——抢占5G市场
- 中山农情统计分析系统项目实施与管理策略
- XX省中小学智慧校园建设实施方案
- 中山农情统计分析系统项目实施方案
- MATLAB函数详解:从Text到Size的实用指南
- 考虑速度与加速度限制的工业机器人轨迹规划与实时补偿算法
- Matlab进行统计回归分析:从单因素到双因素方差分析
- 智慧灯杆数据运营公司策划书:抢占5G市场,打造智慧城市新载体
- Photoshop基础与色彩知识:信息时代的PS认证考试全攻略
- Photoshop技能测试:核心概念与操作
- Photoshop试题与答案详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功