面向对象的数据建模数据筛选接口的设计毕业设计论文.doc

上传人:文库蛋蛋多 文档编号:2389268 上传时间:2023-02-17 格式:DOC 页数:64 大小:1.18MB
返回 下载 相关 举报
面向对象的数据建模数据筛选接口的设计毕业设计论文.doc_第1页
第1页 / 共64页
面向对象的数据建模数据筛选接口的设计毕业设计论文.doc_第2页
第2页 / 共64页
面向对象的数据建模数据筛选接口的设计毕业设计论文.doc_第3页
第3页 / 共64页
面向对象的数据建模数据筛选接口的设计毕业设计论文.doc_第4页
第4页 / 共64页
面向对象的数据建模数据筛选接口的设计毕业设计论文.doc_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《面向对象的数据建模数据筛选接口的设计毕业设计论文.doc》由会员分享,可在线阅读,更多相关《面向对象的数据建模数据筛选接口的设计毕业设计论文.doc(64页珍藏版)》请在三一办公上搜索。

1、成都信息工程学院学位论文面向对象的数据建模数据筛选接口的设计论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期: 面向对象的数据建模数据筛选接口的设计摘 要WISE系统是一个功能强大的数据处理系统。它应用于某公司,此公司由于行业的关系需要它去处理庞大的数据,这些数据每天都在以上百万条甚至上亿条的数量在增加。因此它需要处理海量的数据,它的其中一个比较重要的功能是根据复杂并且灵活的条件筛选出适当的数据返回给客户。本论文主要讲述了如何针对数据筛选条件比较复杂并且比较灵活这一需求,在做了详尽的需求分析之后,进行了一系列的设计,包括解决方案的设计,数据建模,PL/SQL程序设计

2、,最终完成整个数据筛选接口的设计。在整个数据筛选接口的设计中,在传统的关系性数据库的基础上,会尝试着应用一些面向对象的思想去设计。尤其在数据建模阶段,通过传统的数据模型之间的关系,例如主外键关系,实现了一些重要的面向对象的思想。关键字:数据筛选;面向对象;数据建模;PL/SQLImplement the Object Oriented thinking in the project to data modelingthe design about the API to filter dataAbstractThe WISE system is a powerful system for dat

3、a processing .It is applied in a company which needs to use this system to process huge amount data. And these data will be increased by millions or hundreds millions. So it needs to process the huge amount data .One of its important function is return the right data to client filtered by some compl

4、ex and flexible conditions. The most content of the paper talks about how to finish the total design for the requirement which is the conditions to filter data can be complex and flexible. The entire design will include the design of project to solve problem, the design about data modeling, and the

5、design about PL/SQL program. Finally the all designs to implement the interface for filtering the data are finished .We will try implementing the object oriented thinking to design on the base of the relational database in the process to finish all the design. Especially in the process to implement

6、data modeling, we will implement some important object oriented thinking by some relations among traditional data models, such as PK or FK relationship.Key words: data filtration;object oriented;data modeling;PL/SQL目 录论文总页数:24页1 引 言12 开发概述13 需求分析131 需求调研132 开发运行环境34 解决方案的设计35 数据建模85.1 数据模型的建立85.2 数据

7、库表结构的设计95.3 数据库基础视图的设计116 PL/SQL程序设计12结 论22参考文献22致 谢23声 明241 引 言当今社会,某些行业的数据量越来越庞大,每天都在以上百万条甚至上亿条的数量在增加,因此对这些行业的数据处理系统的性能要求也越来越高。这些要求不但包括处理速度尽可能快,系统可维护性尽可能高等传统需求,而且增加了对数据的处理尽可能的灵活等一些新的需求。要满足这些新的需求,我们需要研究这些新需求的特性,挖掘一些解决办法。面向对象的数据建模是我们研究的一个重要方向。引用言论:Steve Hoberman所提出的“抽象组件”的概念和面向对象设计中的“设计模式”非常类似。即数据库专

8、家在多次的数据建模后,将各个项目中的类似部分抽象化,提取出特定的建模模型片段,以后只需在新的项目中对这些模型片段细化派生,即可快速构建出适合于该项目的数据库架构。2 开发概述WISE系统是一个功能强大的数据处理系统。由于业务的关系,它需要处理海量的数据,它的比较重要的一个功能是根据复杂并且灵活的条件筛选出适当的数据返回给客户。针对这一数据筛选功能,开发的目标是设计一个合理的数据筛选接口。接口能做到便于动态控制,便于动态修改,以及便于维护。开发的过程包括需求分析,解决方案的设计,数据建模,PL/SQL程序设计,最终完成整个数据筛选接口的设计。3 需求分析31 需求调研WISE系统是某公司的数据处

9、理系统,它的一个主要功能是每天根据复杂并且灵活的条件筛选出适当的数据返回给客户。所筛选的数据都来自于一张表,这张表的字段有260个,这些字段中有超过250个字段需要作为筛选字段,它们通常互为组合去筛选出客户需要的数据,根据客户的需要它们的组合又是多变的。这张表的数据量通常在一千万到一亿条记录之间。值得注意的是,筛选条件需要去匹配的值是具有特定意义的,尽管这些值数目众多,但它们的数量不是随意增长的。而且这些值是根据客户的需求可以去定制的。表1 复杂表Complexity字段名数据类型说明C_ID数字主键C_U1文本C_U2文本C_U13文本C_U4货币C_U5数字C_U6货币C_U7文本C_U8

10、货币C_U9文本C_U10货币C_U11文本C_U12文本C_U13日期/时间C_U14日期/时间C_U15数字C_U16数字C_U17文本C_U18文本C_U19文本C_U20货币C_U21数字C_U22货币C_U23文本C_U24货币C_U25文本等等一共260个字段因此对数据筛选的需求特点主要有:图1 需求特点分析图数据量庞大在这里不是本次设计的研究重点,后三个特点是本次设计要解决好的需求。32 开发运行环境开发所需的基本软、硬件环境为:l Windows 2003 或者 Windows XP。l Oracle 10 g R2。l CPU 2.40GHzl 1G以上内存。l 2G以上可用

11、硬盘空间。在Windows 2003 操作系统下,以Toad for Oracle Xpert v9.0.1.8为开发工具,用Oracle 10 g R2为后台数据库。4 解决方案的设计在这里来逐步分析需求应该通过怎样的方式来实现,进行一些解决方案的设计。方案1 :直接写过程来实现。根据不同的筛选条件,写不同的过程来实现数据筛选。问题:很显然,这种方案是行不通的。由于筛选字段数量达两百多个,而且相互之间可以互为组合,所以是不应该写过程来实现的。即便把目前需求要求的筛选条件通过写过程来实现了(暂不考虑开发人员的头疼),如果需要添加一些新的筛选,那将是非常麻烦的。再则,如果所写过程中出现一些问题,

12、也是难以维护的。所以考虑到开发的质量与代码的可维护性,是不可能采用此方案的。方案2:结合数据建模与程序设计来实现。由于筛选条件数量众多,但是条件之间的很多部分相互重合,从面向对象的角度出发,这些条件间存在继承的关系,如果能采用面向对象的方法,或许能做到重用条件。假设一共有250个独立的筛选条件,也即表中的250个字段单独作为条件时的情况。这些条件能相互组合,组合后的条件越发复杂,写程序时如果按照方案1要想做到很好的代码重用是不可能实现的。所以根据方案1的失败,要想很好的做到代码重用,就很有必要引入面向对象的思想,采用继承的方法,做到条件组合,就好像类与类之间的继承。作为表中列名出现的字段,是不

13、可能相互组合的。但是换个角度,大胆的设想,如果把这些字段不作为列名,能不能做到相互组合呢?如果把这些字段转换成变量,对变量一一赋值,和作为字段相比并没有做到很大的改善。如果把这些字段转换成表中的记录值呢?试想一下,似乎看到一线光明,因为在PL/SQL里,可以用到动态SQL的方法,这样可以所需要的条件动态的组合了。但是能不能真正达到便于动态控制,便于动态修改,以及便于维护呢?我们需要一步一步去研究,以及测试。根据目前得出的结论,我们现在需要一个表,表中的某一列的记录值为Complexity表中作为筛选条件的列名,如下表2所示:表2 FIELD字段名数据类型说明ID数字主键NAME文本COLUMN

14、_NAME文本列名FIELD表中的COLUMN_NAME列存放Complexity表中作为筛选条件的列名。这样就可以做到把条件一步一步拼起来了。接着往下分析。需要选取出可能作为筛选条件的列名C_U1、C_U2、C_U3、C_U4四个字段,以后的分析将会以它们作为例子。这里把每个单独的列名作为筛选条件的条件叫做简单条件,而多个简单条件组合而成的条件叫做复杂条件。值得注意的是,筛选条件中有相当一部分是类似于C_U1 IN (A, B, C, D)的,它也是简单条件,但是比较特殊一点,这样的条件把它叫做简单序列条件。假设现在客户Ted需要的数据是以C_U1A和C_U2A和C_U2 A 或者C_U2=

15、B,筛选列和匹配的数值我们都可以在相关表中取到,而筛选列和匹配的数值之间的关系,例如大于,小于,等于,时间从某时间开始,这些关系是我们在写代码的时候一直在重复的写的。而正是因为这个原因,代码不能做到代码间的继承和重用,这是一个失败指出。要是通过接口设计能把这些关系像处理筛选列与匹配的数值一样处理,这个问题也就解决了。能做到么?答案是肯定的。因为这些关系也就只有数种,例如数字间的比较,时间数值之间的比较,诸如此类的关系是可以得到有效控制的。对于序列条件,只有两种关系,即是否IN,很显然也可以得到有效的控制。通过以上的分析,现在只需要再加一个表就可以了,这张表用来存放简单条件的筛选列与匹配的数值之

16、间的关系种类,而对于序列条件,就不用,在程序里很容易做到动态处理。为了不占据篇幅,数据筛选接口的完整数据库架构会在后面的数据建模部分中一并出现。5 数据建模5.1 数据模型的建立根据解决方案的设计,画出数据筛选接口的完整数据库架构,如后页图所示:图5 数据库架构图5.2 数据库表结构的设计根据前面完成的解决方案的设计以及数据模型的建立,可以设计出完整的数据库表结构。具体设计如下:用于存放筛选条件,具体设计如表3所示:表3条件表CONDITION字段名数据类型说明ID数字编号字段 主键NAME文本条件名字NEGATED数字判断是否为否定字段CONTAINER_ID数字判断是否属于复合条件字段用于

17、存放条件联接符,具体设计如表4所示:表4条件联接符表CONJUNCTION字段名数据类型说明ID数字编号字段 主键NAME文本名字CODE文本联接符编码用于存放复合条件,具体设计如表5所示:表5复合条件表COMPOUND_CONDITION字段名数据类型说明ID数字编号字段 主键CONJUNCTION_ID数字联接符编号用于存放简单条件信息,具体设计如表6所示:表6简单条件表SIMPLE_CONDITION字段名数据类型说明ID数字编号字段 主键NAME文本简单条件名字VALUE文本简单条件数值OPERATOR_ID数字条件运算符编号FIELD_ID数字筛选列编号用于存放条件运算符信息,具体设

18、计如表7所示:表7条件运算符表CONDITION_OPERATOR字段名数据类型说明ID数字编号字段 主键NAME文本条件运算符名字CODE文本条件运算符编码用于存放序列条件信息,具体设计如表8所示:表8序列条件表LIST_CONDITION字段名数据类型说明ID数字编号字段 主键FIELD_ID数字筛选列编号用于存放序列条件需要去匹配的数值信息,具体设计如表9所示:表9序列条件匹配数值表LIST_CONDITION_MATCH_VALUE字段名数据类型说明ID数字编号字段 主键LIST_CONDITION_ID数字序列条件编号MATCH_VALUE文本序列条件匹配值用于存放筛选列信息,具体设

19、计如表10所示:表10筛选列信息表FIELD字段名数据类型说明ID数字编号字段 主键NAME文本筛选列名字(可作标记)COLUMN_NAME文本实际筛选列名5.3 数据库基础视图的设计通过之前的分析,我发现数据库中的八个表之间关联比较多,应该把通常发生关联的表封装起来,视图正是实现这个封装的最佳选择。需要创建四个视图,分别为简单条件视图,序列条件视图,组合条件视图,以及条件视图。通过这四个视图可以把简单条件,序列条件,以及组合条件和FIELD表很好的封装起来。为了避免占据过多篇幅,这里只以序列条件视图和组合条件视图为例。序列条件视图:CREATE OR REPLACE VIEW V_LIST_

20、CONDITION(FIELD_NAME, COLUMN_NAME, FIELD_TYPE_NAME, FIELD_TYPE_CODE, FIELD_TABLE_TYPE_NAME, FIELD_TABLE_TYPE_CODE, NEGATED, ITEM_COUNT, ID, FIELD_ID, FIELD_TYPE_ID, CONTAINER_ID)AS selectF.Name as Field_Name,F.Column_Name,IC.Negated, ( select count( * )from List_Cond_Match_Value LCMVwhere ( LCMV.Lis

21、t_Condition_ID = LC.ID ) ) as I_Count,LC.ID,F.ID as Field_ID,F.Type_ID as Field_Type_ID,IC.Container_IDfrom List_Condition LCleft outer join Condition Con( C.ID = LC.ID )left outer join Field Fon ( F.ID = LC.Field_ID )/组合条件视图:CREATE OR REPLACE VIEW V_COMPOUND_CONDITION(NEGATED, CONJUNCTION_NAME, CON

22、JUNCTION_CODE, CONDITION_COUNT, ID, CONTAINER_ID, CONJUNCTION_ID)AS select IC.Negated, C.Name as Conjunction_Name, C.Code as Conjunction_Code, ( select count( * ) from Condition ChildCondition where ( ChildCondition.Container_ID = CIC.ID ) ) as Condition_Count, CC.ID, IC.Container_ID, CC.Conjunction

23、_ID from Compound_Condition CC left outer join Condition IC on( IC.ID = CC.ID ) left outer join Conjunction C on( C.ID = CC.Conjunction_ID )/这样就通过创建视图,把简单条件,序列条件,以及组合条件和FIELD表很好的封装起来了。到此,数据建模完成。6 PL/SQL程序设计现在进行本接口设计的PL/SQL程序设计部分。从客户出发,这里来整理一下思路。当客户提出一系列筛选条件的要求时,开发人员首先需要把这些基本的简单条件和匹配的数值,以及相关的记录值,一一插入

24、相关的表中。开发人员可以用写一系列的过程来实现,通过传入必需的参数来调用相关的过程,插入一些数值。从下到上,首先要对表直接进行操作,需要一系列最基本的用来实现把数值插入表的过程。以简单条件为例:procedure Ins_Simple_Condition (p_calling_user_id integer, - Requiredp_name varchar2 := null,p_negated number := 0, - Requiredp_container_id integer := null,p_field_id integer, - Requiredp_value varchar2

25、 := null,p_enum_value_id integer := null,p_comparison_field_id integer := null,p_operator_id integer, - Requiredp_new_row_id out integer ) isbegin-省略部分代码Ins_Condition (p_calling_user_id,p_name,p_negated,p_container_id,p_new_row_id );insert into Simple_Condition (ID,Field_ID,Value,Enum_Value_ID,Compa

26、rison_Field_ID,Operator_ID )values(p_new_row_id,p_field_id,p_value,p_enum_value_id,p_comparison_field_id,p_operator_id );-省略部分代码end;然后,需要在这些基础过程之上,写一些调用这些基础过程的过程,也以简单条件为例:procedure Add_Simple_Condition (p_calling_user_id integer, - Requiredp_app_id integer,p_table_type_code varchar2, - Requiredp_nam

27、e varchar2 := null,p_negated number := 0,p_container_id integer := null,p_field_name varchar2, - Requiredp_value varchar2 := null,p_value_date date := null,p_comparison_field_name varchar2 := null,p_operator_code varchar2, - Requiredp_new_row_id out integer ) is-l_field_id integer;l_field_type_code

28、varchar2( 100 );l_comparison_field_id integer;l_comparison_field_type_code varchar2( 100 );l_operator_code varchar2( 100 );l_operator_id integer;l_value varchar2( 1000 );begin-省略部分代码select ID, Codeinto l_operator_id, l_operator_codefrom Condition_Operatorwhere ( lower( Code ) = lower( p_operator_cod

29、e ) );-省略部分代码Ins_Simple_Condition (p_calling_user_id = p_calling_user_id,p_name = p_name,p_negated = p_negated,p_container_id = p_container_id,p_field_id = l_field_id,p_value = l_value,p_comparison_field_id = l_comparison_field_id,p_operator_id = l_operator_id,p_new_row_id = p_new_row_id );-省略部分代码en

30、d;现在就可以创建一些比较复杂的组合条件了。为了不占据篇幅,这里只以一个简单的复合条件为例:-First compound condition(NO_NOTICE IN(B,C,D) AND MSG_DELINQ_DAYS90 AND DO_NOT_PROCESS=9 AND CLIENT_ID=116) declarel_calling_user_id integer;l_dps_appl_id integer;l_count integer;l_spec_id integer;l_item_id integer;l_simple_id integer;l_inventory_item_id

31、 integer;l_temp_id integer;l_compound_id integer;l_field_id integer;l_rule_id integer;l_list_id integer;l_state_4_ted1 varchar2( 4000 ) := B,C,D;begin-省略部分代码-add conditionAdd_Compound_Item_condition ( p_name = The Fourth compoud condition, p_negated = 0, p_conjunction = And, p_container_id = null, p

32、_new_row_id = l_rule_id);select idinto l_field_idfrom field_where name = NO_NOTICEand ( application_id = l_dps_appl_id or application_id is null );Add_List_Item_condition ( p_name = NO_NOTICE IN(B,C,D), p_negated = 1, p_field_id = l_field_id, p_container_id = l_rule_id, p_new_row_id = l_list_id);for

33、 x in ( with src as ( select l_state_4_ted1 exp from dual ),num as ( select rownum I from dualconnect by rownum 0order by r ) loopAdd_List_Item_condition_MV ( p_list_item_condition_id = l_list_id, p_match_value = x.r, p_new_row_id = l_temp_id);end loop;select idinto l_field_idfrom field_where name =

34、 MSG_DELINQ_DAYSand ( application_id = l_dps_appl_id or application_id is null );Add_Simple_Item_condition ( p_name = null, p_negated = 0, p_container_id = l_rule_id, p_field_id = l_field_id, p_value = 90, p_comparison_field_name = null, p_operator = Greater, p_new_row_id = l_simple_id);select idint

35、o l_field_idfrom field_where name = DO_NOT_PROCESSand ( application_id = l_dps_appl_id or application_id is null );Add_Simple_Item_condition ( p_name = null, p_negated = 0, p_container_id = l_rule_id, p_field_id = l_field_id, p_value = 9, p_comparison_field_name = null, p_operator = Equals, p_new_ro

36、w_id = l_simple_id);select idinto l_field_idfrom field_where name = CLIENT_IDand ( application_id = l_dps_appl_id or application_id is null );Add_Simple_Item_condition ( p_name = null, p_negated = 0, p_container_id = l_rule_id, p_field_id = l_field_id, p_value = 116, p_comparison_field_name = null,

37、p_operator = Equals, p_new_row_id= l_simple_id);COMMIT;end;到此筛选列和需要匹配的数值,就可以得到灵活控制了。还需要对存储在表CONDITION_OPERATOR中的数值,也就是记录筛选列和需要匹配的数值之间的关系的数值进行处理,以便能动态处理。下面只以需要匹配的数值的数据类型为日期类型的情况为例。当需要匹配的数值的数据类型为日期类型时,如下:function Comparison_Date (p_row V_Simple_Condition%rowtype,p_field_ref varchar2,p_comparison_field

38、_ref varchar2 ) return varchar2 isl_comparison varchar2( 4000 );l_operator varchar2( 2 );l_value_this_day date;l_value_this_day_string varchar2( 1000 );l_value_next_day date;l_value_next_day_string varchar2( 1000 );begin-省略部分代码if( p_comparison_field_ref is not null ) then-省略部分代码l_value_this_day_stri

39、ng := trunc( | p_comparison_field_ref| , dd );l_value_next_day_string := trunc( | p_comparison_field_ref| + 1, dd );elseif ( p_row.Value is not null ) thenl_value_this_day := to_date( p_row.Value, g_date_format );l_value_this_day_string := to_date( | | p_row.Value | , | | g_date_format | ) ;l_value_next_day := l_value_this_day + 1;l_value_next_day_string := to_date( | | to_char( l_value_next_day, g_date_forma

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号