数据库基础知识(二)

目录

第六章 关系数据理论

6.1 问题的提出

6.2 规范化

6.2.1 函数依赖

6.2.2 范式

6.2.3 多值依赖

6.3 数据依赖的公理系统

6.4 模式的分解

第七章 数据库设计

7.1 需求分析阶段

7.2 概念结构设计阶段

7.3 逻辑结构设计阶段

7.4 物理结构设计阶段

7.5 数据库实施阶段

7.6 数据库运行和维护阶段

第八章 数据库编程

8.1 概论

8.2 嵌入式SQL

8.3 过程化SQL

8.4 存储过程和函数

8.4.1 存储过程

8.4.2 函数

8.5 ODBC和JDBC编程

8.5.1 ODBC编程

8.5.2 JDBC编程

下一篇




第六章 关系数据理论

6.1 问题的提出

a.任何一种数据库应用系统,不管是层次的、网状的、还是关系的,都会遇到如何构造合适的数据模式即逻辑结构的问题。由于关系模型有严格的书数学理论基础,并且可以向别的数据模型转换。因此,人们以关系模型为背景,形成了数据库逻辑设计的有力工具——关系数据库规范化理论。

b.不规范的关系模式常出现的四个问题

        数据冗余:(Sno,Sdept,Mname,Cno,Grade) 每个系的系主任名字重复出现

        更新异常:(Sno,Sdept,Mname,Cno,Grade) 某个系更换系主任后相关的每个学生元组都要变更

        插入异常:(Sno,Sdept,Mname,Cno,Grade) 某个系新成立但没有招生,添加系和系主任信息失败

        删除异常:(Sno,Sdept,Mname,Cno,Grade) 某个系学生全部毕业,学生信息需要删除时系信息也被影响

6.2 规范化

6.2.1 函数依赖

a.函数依赖:X函数确定Y 或 Y函数依赖于X,记作 X->Y。如 name->age,年龄函数依赖于姓名

对于关系 (Sno,Sdept,Cno,Grade)

b.完全函数依赖:如果X->Y,并且对于任意一个真子集X',都有X'-/>Y,则称Y对X完全函数依赖。如 (Sno,Cno)->Grade

c.部分函数依赖:如果X->Y,并且存在一个真子集X',使得X'->Y,则称Y对X部分函数依赖。如(Sno,Cno)->Sdept

6.2.2 范式

1NF:数据库的每一列都是不可分割的基本数据项

2NF:满足第一范式,且非主属性必须完全依赖于候选码。

3NF:满足第二范式,且非主属性都不传递依赖于任一候选码。

BCNF:满足第三范式,且每个字段都不传递依赖于任一候选码。

6.2.3 多值依赖

 

6.3 数据依赖的公理系统

Armstrong公理系统

6.4 模式的分解

既要保持函数依赖,又要具有无损连接

第七章 数据库设计

7.1 需求分析阶段

 

7.2 概念结构设计阶段

 

7.3 逻辑结构设计阶段

 

7.4 物理结构设计阶段

 

7.5 数据库实施阶段

 

7.6 数据库运行和维护阶段

 

第八章 数据库编程

8.1 概论

标准SQL是非过程化的查询语言,具有操作统一、面向集合、功能丰富、使用简单等多项优点。但和程序设计语言相比,高度非过程化的优点也造成了它的一个弱点:缺少流程控制能力,难以实现应用业务中的逻辑控制。SQL编程技术可以有效克服SQL语言实现复杂应用方面的不足,提高应用系统和数据库管理系统间的互操作性。

在应用系统中使用SQL编程来访问和管理数据库中数据的方式主要有:

8.2 嵌入式SQL

游标:SQL是面向集合的,一条SQL语句可以产生或处理多条记录;而主语言是面向记录的,一组主变量一次只能存放一条记录。所以仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,因此嵌入式SQL引入游标的概念。

游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录并赋给主变量,交由主语言进一步处理。

游标示例:

begin
declare temp_user_id int default null;
declare stop int default 0;
#声明游标
 declare temp_cur cursor for select f_user_id from table_test where f_user_id=1;
 #声明游标的异常处理
 declare continue handler for NOT FOUND set stop=1;
 open temp_cur;
 fetch temp_cur into temp_user_id;
 #判断游标是否到达最后
 while stop<>1 do
 #各种判断
 #读取下一行的数据   
 fetch temp_cur into temp_user_id;  
 #循环结束  
 end while; 
 #关闭游标
 close temp_cur;
end

1.声明游标
DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。          
2. 游标OPEN语句
OPEN cursor_name
这个语句打开先前声明的游标。

3. 游标FETCH语句
FETCH cursor_name INTO var_name [, var_name] ...
这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。

4. 游标CLOSE语句
CLOSE cursor_name
这个语句关闭先前打开的游标。

8.3 过程化SQL

过程化SQL是对SQL的扩展,使其增加了过程化语句功能。过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的。这些块之间可以相互嵌套,每个块完成一个逻辑操作。

 

8.4 存储过程和函数

8.4.1 存储过程

a.存储过程是由过程化SQL语句书写的过程,这个过程经过编译和优化后存储在数据库服务器中,因此称为存储过程,使用时调用即可。

b.存储过程的优点:

        (1)运行效率高;(2)降低了客户机和服务器之间的通信量;(3)方便实施企业规则。

c.存储过程示例:

//创建存储过程的语法形式:
CREATE PROC[ EDURE ] 存储过程名[;number] 
[ { @参数名  数据类型 } [ = default ] [OUTPUT] 
] [ , ... n ]
  AS  
    SQL语句 [ ... n ]
number:可选整数,用来对同名的过程分组,方便删除
default:表示参数的默认值。如果定义了默认值,则在执行存储过程时,可以不必指定该参数的值。
OUTPUT:表明参数是输出参数。使用 OUTPUT 参数可将信息返回给调用者。

//存储过程的调用形式:
[ EXEC [ UTE ] ] 存储过程名 
   [实参 [, OUTPUT] [, … n] ]

//实例
//带有输入参数的存储过程:查询某个指定系学生的考试情况,列出学生的姓名、所在系、课程名和考试成绩。
CREATE  PROCEDURE  p_grade2
    @dept varchar(20)
  AS
    SELECT Sname, Sdept,Cname, Grade
    FROM Student s,sc, course c
    WHERE s.sno = sc.sno AND c.cno = sc.cno
    AND Sdept = @dept

//查询信息系学生的修课情况:
	EXEC[UTE] p_grade2 ‘is'

8.4.2 函数

a.本章讲解的函数是自定义函数,这是由用户自己使用过程化SQL设计定义的。函数和存储过程类似,都是持久性存储模块。函数的定义和存储过程也类似,不同之处是函数必须指定返回的类型。

b.函数使用示例:

//创建自定义标量函数TOTAL()用来计算任意两数之和。标量函数(返回值为基本数据类型)
CREATE FUNCTION TOTAL(@expr1  int,@expr2  int)
RETURNS int
BEGIN
DECLARE @my_total  int
SELECT @my_total=@expr1+@expr2
RETURN @my_total
END
GO
//用命令行调用TOTAL()函数:
SELECT dbo.TOTAL(10,20) AS 两数之和




//创建表值函数的应用举例 (返回基本表)(不使用begin……end函数体)
//创建函数fun_table( )返回一组查询的结果。
USE student
GO
CREATE FUNCTION fun_table (@sno char(9),@grade int)
RETURNS TABLE
AS
RETURN (SELECT * FROM sc WHERE sno=@sno 
        union SELECT * FROM sc WHERE grade>@grade)
//调用
SELECT * FROM dbo. fun_table('200515001',80)

8.5 ODBC和JDBC编程

8.5.1 ODBC编程

微软推出的接口标准。

ODBC连接数据库实例:

 

8.5.2 JDBC编程

JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。

JDBC连接数据库实例:

JDBC中常用类和接口:

连接到数据库(Connection)、建立操作指令(Statement)、执行查询指令(executeQuery)、获得查询结果(ResultSet)等。

 


下一篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值