版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.层次网状数据模型和关系数据模型各有什么特点?当前数据模型发展的方向是什么注:答题的时候分别说明层次网状和关系模型在数据结构,数据操作,和数据约束方面的特点即可。下面这句话是重点:结合课本上P20-P30 ,P337-P339 页的内容老说明他们三种模型的特点:层次模型、网状模型和关系模型是三种重要的数据模型。这三种模型是按其数据结构而命名的。前两种采用格式化的结构。在这类结构中实体用记录型表示,而记录型抽象为图的顶点。记录型之间的联系抽象为顶点间的连接弧。整个数据结构与图相对应。对应于树形图的数据模型为层次模型;对应于网状图的数据模型为网状模型。关系模型为非格式化的结构,用单一的二维表的结
2、构表示实体及实体之间的联系。满足一定条件的二维表,称为一个关系(见关系数据库。 当前数据模型发展的方向:(王珊教材340页:复杂数据模型,语义关系模型、面向对象数据模型、XML数据模型其他参考答案:1、层次模型满足以下二个条件的基本层次联系的集合:(1有且只有一个结点没有双亲结点(这个结点叫根结点;(2除根结点外的其他结点有且只有一个双亲结点。层次模型与网状模型类似,分别用记录和链接来表示数据和数据间的联系。与网状模型不同的是:层次模型中的记录只能组织成树的集合而不能是任意图的集合。层次模型可以看成是网状模型的特例,它们都是格式化模型。它们从体系结构、数据库语言到数据存储管理均有共同的特征。在
3、层次模型中,记录的组织不再是一张杂乱无章的图,而是一棵"倒长"的树。2、网状模型满足以下二个条件的基本层次联系的集合:(1允许一个以上的结点没有双亲结点;(2一个结点可以有多个双亲结点。网状模型中的数据用记录(与Pascal语言中的记录含义相同的集合来表示,数据间的联系用链接(可看作指针来表示。数据库中的记录可被组织成任意图的集合。3、关系模型关系模型用表的集合来表示数据和数据间的联系。每个表有多个列,每列有唯一的列名。在关系模型中,无论是从客观事物中抽象出的实体,还是实体之间的联系,都用单一的结构类型关系来表示。在对关系进行各种处理之后,得到的还是关系一张新的二维表。相关
4、课件: 2、集中式数据库系统和分布式数据库系统的数据独立性。注:其他相关内容参考课本P354区分一个系统是若干集中式数据库的简单连网还是分布式数据库系统的技术要点在于:系统是否支持全局应用(用户可以通过客户机对两个或两个以上结点中的数据库执行某些应用集中式数据系统的数据独立性包含下面前2点:分布式数据库系统的数据独立性包含了全部: 3、OLTP与OLAP的异同。OLTP主要执行基本的、日常的事务处理,比如在银行存取一笔款,就是一个事务交易。OLTP的特点一般有:实时性要求高。查询的数据量不是很大。交易一般是确定的,所以OLTP是对确定性的数据进行存取。并发性要求高,并且严格要求事务的完整性、安
5、全性。OLAP是数据仓库系统的主要应用,其典型的应用就是复杂的动态报表系统。OLAP 的特点一般有:实时性要求不是很高,很多应用最多每天更新一次数据。数据量大。因为OLAP支持的是动态查询,用户要通过对很多数据的统计才能得到想要知道的信息,如时间序列分析等,所以处理的数据量很大。因为重点在于决策支持,所以查询一般是动态的,也就是说允许用户随时提出查询的要求。因此,在OLAP中通过一个重要概念“维”来搭建一个动态查询的平台(或技术,供用户自己决定需要知道的信息。OLAP和OLTP的主要区别如表1-1所示。 4、JDBC 驱动使用步骤,如何基于JDBC驱动操纵数据库中LOB类型的数据。JDBC 驱
6、动使用步骤:引入包import *;加载并注册驱动Class.forName("oracle.jdbc.driver.OracleDriver"Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"Class.forName("com.mysql.jdbc.Driver"Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"Class.forName("com.microsoft. Sqlserver.jd
7、bc.SQLServerDriver"创建连接Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:/dssw2k01:1521:orcl", "scott", "tiger"Oracle推荐用数据源创建连接对象创建语句对象Statement stmt = conn.createStatement(用语句对象执行SQL 语句(存储过程.executeQuery(: 执行单个查询语句返回一个ResultSet对象,封装了查询的结果.executeUpd
8、ate(: 执行单个数据更新语句,DDL语句返回一个标识更新行数的整数.execute(:执行多个Sql语句,这些语句返回多个结果集、多个更新记数。返回一个boolean值。根据这个值获取执行的结果如果返回true,表明返回的第一个结果是结果集,这时调用.getResultSet (获取结果集。如果返回false,表明返回的第一个结果是更新记数,这时调用.getUpdateCount(获取更新记数。然后使用getMoreResult(来移动后续结果处理执行结果对于返回的结果集应该进一步处理获取结果集的元数据(使用编写通用报表程序,利用结果集元数据可以编写通用代码ResultsetMetaDat
9、a rsdata=resultset.getMetaData(; 利用该元数据:(1 getColumnCount(:返回一个int值,指出结果集中的列数;(2 getTableName(int column:返回一个字符串,指出参数中所代表列的表的名称;(3 getColumnLabel(int column:返回一个String对象,该对象是column所指的列的显示标题;(4 getColumnName(int column:返回的是该列在数据库中的名称。可以把此方法返回的String对象作为Resultset类的getXXX(方法的参数。不过,并没有太大的实际意义;(5 getColu
10、mnType(int comlumn:返回指定列的SQL数据类型。它的返回值是一个int 值。在java.sql.Types类中有关于各种SQL数据类型的定义;(6 getColumnTypeName(int comlumn:返回指定列的数据类型在数据源中的名称。它的返回值是一个String对象;(7 isReadOnly(int column :返回一个boolean值,指出该列是否是只读的;(8 isWriteable(int column :返回一个boolean值,指出该列是否可写;(9 isNullable(int column:返回一个boolean值,指出该列是否允许存入一个NU
11、LL 值。对以结果集,用循环处理每一行结果Int colCount = rsmt. getColumnCount(;While(rs.next(for(int 1=1;i<= colCount ;i+rs.getXXX(i ;注意:getString(getInt(getLong(getObject(get?/关闭对象if(stmt!=nullstmt.close(; if(rs!=null rs.close(; if(conn!=nullconn.close(;2参考答案:第一、设置不自动提交;第二、插入一个空的LOB对象第三、查询此LOB对象并锁定;第四、取出此LOB对象第五、向LO
12、B中写数据bufferedoutputstream out = new bufferedoutputstream(blob.getbinaryoutputstream(;bufferedinputstream in = new bufferedinputstream(new fileinputstream(infile;int c;while (c=in.read(!=-1 out.write(c;读数据:/ Read BLOB data from BLOB locator.InputStream byte_stream = my_blob.getBinaryStream(1L;byte by
13、te_array = new byte 10;int bytes_read = byte_stream.read(byte_array;第六、正式提交;第七、出错回滚;第八、恢复自动提交建表SQL语句为:CREATE TABLE TEST_CLOB ( ID NUMBER(3, CLOBCOL CLOBCREATE TABLE TEST_BLOB ( ID NUMBER(3, BLOBCOL BLOB一、 CLOB对象的存取1、往数据库中插入一个新的CLOB对象public static void clobInsert(String infile throws Exception/* 设定不自
14、动提交 */boolean defaultCommit = conn.getAutoCommit(;conn.setAutoCommit(false;try /* 插入一个空的CLOB对象 */stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES ('111', EMPTY_CLOB("/* 查询此CLOB对象并锁定 */ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UP
15、DATE"while (rs.next( /* 取出此CLOB对象 */oracle.sql.CLOB clob = (oracle.sql.CLOBrs.getClob("CLOBCOL"/* 向CLOB对象中写入数据 */BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream(;BufferedReader in = new BufferedReader(new FileReader(infile;int c;while (c=in.read(!=-1 out.write(c;
16、in.close(;out.close(;/* 或进行覆盖式修改 */BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream(;BufferedReader in = new BufferedReader(new FileReader(infile;int c;while (c=in.read(!=-1 out.write(c;in.close(;out.close(;-/* 或更新数据 */BufferedWriter out = new BufferedWriter(clob.getCharacterOut
17、putStream(;BufferedReader in = new BufferedReader(new FileReader(infile;int c;while (c=in.read(!=-1 out.write(c;in.close(;out.close(;-/* 或以字符形式输出 */BufferedReader in = new BufferedReader(clob.getCharacterStream(;BufferedWriter out = new BufferedWriter(new FileWriter(outfile;int c;while (c=in.read(!=
18、-1 out.write(c;out.close(; catch (Exception ex conn.rollback(;throw ex;-/* 正式提交 */mit(; catch (Exception ex /* 出错回滚 */conn.rollback(;throw ex;/* 恢复原提交状态 */conn.setAutoCommit(defaultCommit;=二、 BLOB对象的存取1、向数据库中插入一个新的BLOB对象public static void blobInsert(String infile throws Exception/* 设定不自动提交 */boolean
19、 defaultCommit = conn.getAutoCommit(;conn.setAutoCommit(false;try /* 插入一个空的BLOB对象 */stmt.executeUpdate("INSERT INTO TEST_BLOB VALUES ('222', EMPTY_BLOB("/* 查询此BLOB对象并锁定 */ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE"whi
20、le (rs.next( /* 取出此BLOB对象 */oracle.sql.BLOB blob = (oracle.sql.BLOBrs.getBlob("BLOBCOL"/* 向BLOB对象中写入数据 */BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream(;BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile;int c;while (c=in.read(!=-1 o
21、ut.write(c;out.close(;/* 正式提交 */mit(; catch (Exception ex /* 出错回滚 */conn.rollback(;throw ex;/* 恢复原提交状态 */conn.setAutoCommit(defaultCommit;5、从结构、类型和隔离级别等方面分析Oracle事务的特点,如何基于JDBC实现事务。注:这个在王珊教材279页原子性:一个事务(transaction中的所有操纵,要么全部完成,要么全部不完成,不会停止在中心某个环节。事务在履行过程中产生错误,会被回滚(Rollback到事务开端前的状况,就像这个事务从来没有履行过一样。
22、事务的一致性数据库的一致性,即数据库必须满足所有完整性约束(完整性约束有时也称一致性约束;事务一致性,即如果处于隔离状态的事务的执行使处于一致性状态的数据库局变化到新的一致性状态,那么数据库的新状态也要满足事务的规格说明要求事务的持久性系统必须确保一旦事务提交,不管后来计算机和存储介质是否发生故障,其执行结果必须反映在数据中。Oracle 事务的类型只读:用SET TRANSACTION Read only设置,这种类型的事务有着SERIALIZABLE 隔离级别的所有的隔离性,保证事务级别的读一致性,但同时限制修改读写:用Set TRANSACTION READ WRITE设置,这种类型的事
23、务使用默认的隔离级别(Read committed,能够处理读、写操作;是Oracle的默认事务类型。隔离性:当两个或者多个事务并发接见(此处接见指查询和批改的操纵数据库的同一数据时所发挥解析出的彼此关系。事务隔离分为不合级别,包含读未提交(Read uncommitted、读提交(read committed、可反复读(repeatable read和串行化(Serializable。Oracle的隔离级别所有的ORACLE SQL语句都是针对某一时间点上的数据库数据的镜像来操作的,这个镜像在此特定的时间点上是一致的。这个一致性镜像从来不会反应出未被提交的改变,因此ORACLE不会进行“脏读
24、”,也就没有READ UNCOMMITTED隔离级别;SET TRANSACTION ISOLATION LEVEL SERIALIZABLE:可串行化级别。这个级别下,事务内部的语句看到的数据是事务开始时已经提交到数据库的数据,和本事务作增、删、改操作后的数据。SET TRANSACTION ISOLATION LEVEL READ COMMITTED在这个级别下,每个事务所执行的查询只能获取该查询开始时(而不是该事务开始时已近提交到数据库的数据。这样在一个事务内运行同一条查询语句,查询结果可能不同(出现不可重复读现象。这种隔离保持了语句级数据读一致性。基于JDBC实现事务。第一、设置事物提
25、交模式:conn.setAutoCommit(false;第二、设置事物隔离级别:conn.setTransactionIsolation(int i第三、执行代码;第四、手动提交数据;第五、出错就回滚;第六、将事物提交模式设为TRUE;6、Oracle的隐式游标和显式游标有何不同?如何使用显式游标?(要知道怎么去写,而不是只知道概念,p284+7、Oracle的静态游标和动态游标有何不同?如何使用动态游标?静态游标是以游标打开时刻的当时状态显示结果集的游标。静态游标在游标打开时不反映对基础数据进行的更新、删除或插入。有时称它们为快照游标。动态游标是可以在游标打开时反映对基础数据进行的修改的游
26、标。用户所做的更新、删除和插入在动态游标中加以反映。例2、前面的例子需要用循环从游标中一行一行的取数据,本例使用BULK COLLECT 把数据从游标中一次读取到嵌套表中,表的类型就是游标中各列的类型。DECLARETYPE IdsTab IS TABLE OF employees.employee_id%TYPE;-将来存放employee_id 列。TYPE NameTab IS TABLE OF employees.last_name%TYPE; -将来存放last_name列。ids IdsTab;names NameTab;CURSOR c1 ISSELECT employee_id
27、, last_name FROM employees WHERE job_id = 'ST_CLERK'BEGINOPEN c1;FETCH c1 BULK COLLECT INTO ids, names;CLOsE c1;- 从嵌套表中获取数据FOR i IN ids.FIRST . ids.LASTLOOPIF ids(i > 140 THENDBMS_OUTPUT.PUT_LINE( ids(i ;END IF;END LOOP;FOR i IN names.FIRST . names.LASTLOOPIF names(i LIKE '%Ma%' T
28、HENDBMS_OUTPUT.PUT_LINE( names(i ;END IF;END LOOP;例4、本例是一个动态游标。先在代码声明部分定义一个引用游标的数据类型,再使用该类型定义一个游标变量,最后在代码体部分把游标变量与SELECT语句绑定。DECLARETYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE;emp_cv empcurtyp;emp_rec employees%ROWTYPE;BEGINOPEN emp_cv FOR SELECT * FROM employees WHERE employee_id < 120
29、;LOOPFETCH emp_cv INTO emp_rec; - fetch from cursor variableEXIT WHEN emp_cv%NOTFOUND; - exit when last row is fetched- process data recordDBMS_OUTPUT.PUT_LINE('Name = ' | emp_rec.first_name | ' ' |emp_rec.last_name;END LOOP;CLOSE emp_cv;END;附:PL/SQL查询方法小计(1查询结果至多一行:用SELECT INTO语句。(2
30、查询多行:如果想一次把查询结果赋值给变量,用BULK COLLECT语句;如果想处理结果集的每一行,用游标。8、如何定义PL/SQL包?如何在PL/SQL程序中使用记录和索引表?包的开发步骤编辑调试子程序。把它们继承到包规范和包体中。调试包。下面是一个包的例子,在包规范声明了个引用游标的数据类型,两个变量,两个过程和一个函数。CREATE OR REPLACE PACKAGE emp_pkASTYPE EmpRecType IS RECORD(Empno char(3,Salary REAL;P1 VARCHAR2(20;CURSOR order_sal RETURN EmpRecType;P
31、ROCEDURE hire_emp(eno char,ename varchar2,age number,sal number,mgr char,dno char;PROCEDURE fire_emp(e_no char;FUNCTION count_emp(d_no chat return INTEGER;END emp_pk;CREATE OR REPLACE PACKAGE BODY emp_pkASCURSOR order_sal RETURN EmpRecType ISSELECT eno,sal FROM emp ORDER BY sal;-定义游标PROCEDURE hire_e
32、mp(eno char,ename varchar2,age number,sal number,mgr char,dno charISBEGININSERT INTO emp VALUES(ENO,ENAME,AGE,SAL,MGR,DNOEND;-定义过程PROCEDURE fire_emp(e_no charASBEGINDELETE FROM emp WHERE eno=e_no;END; -定义过程FUNCTION count_emp(d_no chatreturn INTEGERASnum INTEGER;BEGINSELECT COUNT(* INTO num FROM emp
33、WHERE deptno=d_no;RETURN num;END; -定义函数END emp_pk;3.4.4、包的调用、包名.类型名、包名.数据项名、包名.子程序名DECLARETYPE location_rec IS RECORD (room_number NUMBER(4,building V ARCHAR2(25;TYPE person_rec IS RECORD (employee_id employees.employee_id%TYPE,first_name employees.first_name%TYPE,last_name employees.last_name%TYPE,
34、location location_rec;person person_rec;TYPE jobids_array IS V ARRAY(20 OF V ARCHAR2(10;jobids jobids_array; 声明变量TYPE type_name IS TABLE OF element_type NOT NULL INDEX BY BINARY_INTEGER|varchar2;索引表可容纳的数据类型:BINARY_INTEGER, BOOLEAN, LONG, LONG RAW, NATURAL, NA TURALN ,PLS_INTEGER, POSITIVE , POSITIVE
35、N, SIGNTYPE , and STRING9、什么是数据字典?如何定义一个数据项。王珊P207二、数据字典应用举例以学生选课数据字典为例简要说明如何定义数据字典。学生选课的数据流图如下:数据项:以“学号”为例 数据项名:学号数据项含义:唯一标识每一个学生别名:学生编号数据类型:字符型长度:8取值范围:0000099999取值含义:前2位为入学年号,后3位为顺序编号与其他数据项的逻辑关系:(无数据结构:以“学生”为例数据结构名:学生含义说明:是学籍管理子系统的主体数据结构,定义了一个学生的有关信息组成:学号,姓名,性别,年龄,所在系数据流:以“选课信息”为例数据流名:选课信息说明:学生所选
36、课程信息数据流来源:“学生选课”处理数据流去向:“学生选课”存储组成:学号,课程号平均流量:每天10个高峰期流量:每天100个数据存储:以“学生选课”为例数据存储名:学生选课说明:记录学生所选课程的成绩编号:(无流入的数据流:选课信息,成绩信息流出的数据流:选课信息,成绩信息组成:学号,课程号,成绩数据量:50000个记录存取方式:随机存取处理过程:以“学生选课”为例处理过程名:学生选课说明:学生从可选修的课程中选出课程输入数据流:学生,课程输出数据流:学生选课处理:每学期学生都可以从公布的选修课程中选修自己愿意选修的课程,选课时有些选修课有先修课程的要求,还要保证选修课的上课时间不能与该生必修课时间相冲突,每个学生四年内的选修课门数不能超过8门。10、什么是数据库设计?如何从软件工程角度看待规范设计法的步骤?概念:P198, P20111、比较概念结构设计与逻辑结构设计。209-224将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计它是整个数据库设计的关键。概念结构设计的任务主要分为两个方面:1、数据库方面:设计ER
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2026技能考试养老护理员初级题库完整版附答案
- 2026~2026国家电网安规考试考试题库及答案解析第133期
- 2026广西公需科目答案
- 2026广播电视值机员考试题及答案解析
- 高三数学选填题精研教学设计
- 2026年2型糖尿病健康管理考核考试试卷试题及答案
- 2026年安考证b证预测试题及参考答案详解(培优B卷)
- 八年级物理沪粤版新教材第九章进阶突破教学设计
- 2026年保荐代表人胜任能力考试备考复习题及答案
- 2026年安全员之江苏省C1证(机械安全员)题库综合试卷A卷附答案
- 雨课堂学堂在线学堂云《国家安全概论(吉林)》单元测试考核答案
- 年度招标代理合同协议书
- DB34∕T 4010-2021 水利工程外观质量评定规程
- JG/T 455-2014建筑门窗幕墙用钢化玻璃
- 高空作业防水施工方案
- Unit5OntheroadDevelopingideas明信片写作指导课件-高一英语
- 健美操-青春魅力课件
- 施工组织设计-汽研中心风洞试验室工程
- 中考科学教师培训课堂教学难点的确定与化解市赛课公开课一等奖省名师获奖课件
- 人力资源管理研究与实践(前沿量表手册)
- 急性脑卒中静脉溶栓护理课件
评论
0/150
提交评论