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驱动操纵数据库中
6、LOB类型的数据。JDBC 驱动使用步骤: 引入包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.jdbc.SQLServerDriver); 创建连接C
7、onnection conn = DriverManager.getConnection( jdbc:oracle:thin:/dssw2k01:1521:orcl, scott, tiger);Oracle推荐用数据源创建连接对象创建语句对象Statement stmt = conn.createStatement()用语句对象执行SQL 语句(存储过程).executeQuery(): 执行单个查询语句返回一个ResultSet对象,封装了查询的结果.executeUpdate(): 执行单个数据更新语句,DDL语句返回一个标识更新行数的整数.execute():执行多个Sql语句,这些语
8、句返回多个结果集、多个更新记数。返回一个boolean值。根据这个值获取执行的结果如果返回true,表明返回的第一个结果是结果集,这时调用.getResultSet ()获取结果集。如果返回false,表明返回的第一个结果是更新记数,这时调用.getUpdateCount()获取更新记数。然后使用getMoreResult()来移动后续结果处理执行结果对于返回的结果集应该进一步处理获取结果集的元数据(使用编写通用报表程序),利用结果集元数据可以编写通用代码ResultsetMetaDatarsdata=resultset.getMetaData(); 利用该元数据:(1)getColumnCo
9、unt():返回一个int值,指出结果集中的列数; (2)getTableName(intcolumn):返回一个字符串,指出参数中所代表列的表的名称; (3)getColumnLabel(intcolumn):返回一个String对象,该对象是column所指的列的显示标题; (4)getColumnName(intcolumn):返回的是该列在数据库中的名称。可以把此方法返回的String对象作为Resultset类的getXXX()方法的参数。不过,并没有太大的实际意义; (5)getColumnType(intcomlumn):返回指定列的SQL数据类型。它的返回值是一个int值。在j
10、ava.sql.Types类中有关于各种SQL数据类型的定义; (6)getColumnTypeName(intcomlumn):返回指定列的数据类型在数据源中的名称。它的返回值是一个String对象; (7)isReadOnly(intcolumn):返回一个boolean值,指出该列是否是只读的; (8)isWriteable(intcolumn):返回一个boolean值,指出该列是否可写;(9)isNullable(intcolumn):返回一个boolean值,指出该列是否允许存入一个NULL值。 对以结果集,用循环处理每一行结果Int colCount = rsmt. getCol
11、umnCount();While(rs.next() for(int 1=1;i 140 THEN DBMS_OUTPUT.PUT_LINE( ids(i) ); END IF; END LOOP; FOR i IN names.FIRST . names.LAST LOOP IF names(i) LIKE %Ma% THEN DBMS_OUTPUT.PUT_LINE( names(i) ); END IF; END LOOP;例4、本例是一个动态游标。先在代码声明部分定义一个引用游标的数据类型,再使用该类型定义一个游标变量,最后在代码体部分把游标变量与SELECT语句绑定。DECLARE
12、TYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE; emp_cv empcurtyp; emp_rec employees%ROWTYPE;BEGIN OPEN emp_cv FOR SELECT * FROM employees WHERE employee_id 120; LOOP FETCH emp_cv INTO emp_rec; - fetch from cursor variable EXIT WHEN emp_cv%NOTFOUND; - exit when last row is fetched - process data record DBMS_OUTPUT.PUT_LINE(Name = | emp_rec.first_name | | emp_rec.last_name); END LOOP; CLOSE