当前位置:首页 » 操作系统 » 管理系统数据库的实现

管理系统数据库的实现

发布时间: 2025-06-26 09:43:15

‘壹’ 数据库系统实现的目录

出版者的话
译者序
译者简介
出版前言
第1章dbms系统概述
1.1数据库系统的发展
1.1.1早期的数据库管理系统
1.1.2关系数据库系统
1.1.3越来越小的系统
1.1.4越来越大的系统
1.1.5信息集成
1.2数据库管理系统概述
1.2.1数据定义语言命令
1.2.2查询处理概述
1.2.3主存和缓冲区管理器
1.2.4事务处理
1.2.5查询处理器
1.3本书概述
1.4数据库模型和语言回顾
1.4.1关系模型回顾
.1.4.2sql回顾
1.5参考文献
第一部分数据库系统实现
第2章辅助存储管理
2.1存储器层次
2.1.1存储器层次
2.1.2在存储器层次间传送数据
2.1.3易失和非易失存储器
2.1.4虚拟存储器
2.1.5习题
2.2磁盘
2.2.1磁盘结构
2.2.2磁盘控制器
2.2.3磁盘存取特性
2.2.4习题
2.3加速对辅助存储器的访问
2.3.1计算的i/o模型
2.3.2按柱面组织数据
2.3.3使用多个磁盘
2.3.4磁盘镜像
2.3.5磁盘调度和电梯算法
2.3.6预取和大规模缓冲
2.3.7习题
2.4磁盘故障
2.4.1间断性故障
2.4.2校验和
2.4.3稳定存储
2.4.4稳定存储的错误处理能力
2.4.5从磁盘崩溃中恢复
2.4.6作为冗余技术的镜像
2.4.7奇偶块
2.4.8一种改进:raid 5
2.4.9多个盘崩溃时的处理
2.4.10习题
2.5组织磁盘上的数据
2.5.1定长记录
2.5.2定长记录在块中的放置
2.5.3习题
2.6块和记录地址的表示
2.6.1客户机-服务器系统中的地址
2.6.2逻辑地址和结构地址
2.6.3指针混写
2.6.4块返回磁盘
2.6.5被钉住的记录和块
2.6.6习题
2.7变长数据和记录
2.7.1具有变长字段的记录
2.7.2具有重复字段的记录
2.7.3可变格式的记录
2.7.4不能装入一个块中的记录
2.7.5blob
2.7.6列存储
2.7.7习题
2.8记录的修改
2.8.1插入
2.8.2删除
2.8.3修改
2.8.4习题
2.9小结
2.10参考文献
第3章索引结构
3.1索引结构基础
3.1.1顺序文件
3.1.2稠密索引
3.1.3稀疏索引
3.1.4多级索引
3.1.5辅助索引
3.1.6辅助索引的运用
3.1.7辅助索引中的间接
3.1.8文档检索和倒排索引
3.1.9习题
3.2b-树
3.2.1b-树的结构
3.2.2b-树的应用
3.2.3b-树的查找
3.2.4范围查询
3.2.5b-树的插入
3.2.6b-树的删除
3.2.7b-树的效率
3.2.8习题
3.3散列表
3.3.1辅存散列表
3.3.2散列表的插入
3.3.3散列表的删除
3.3.4散列表索引的效率
3.3.5可扩展散列表
3.3.6可扩展散列表的插入
3.3.7线性散列表
3.3.8线性散列表的插入
3.3.9习题
3.4多维索引
3.4.1多维索引的应用
3.4.2利用传统索引执行范围查询
3.4.3利用传统索引执行最近邻查询
3.4.4多维索引结构综述
3.5多维数据的散列结构
3.5.1网格文件
3.5.2网格文件的查找
3.5.3网格文件的插入
3.5.4网格文件的性能
3.5.5分段散列函数
3.5.6网格文件和分段散列的比较
3.5.7习题
3.6多维数据的树结构
3.6.1多键索引
3.6.2多键索引的性能
3.6.3kd-树
3.6.4kd-树的操作
3.6.5使kd-树适合辅助存储器
3.6.6四叉树
3.6.7r-树
3.6.8r-树的操作
3.6.9习题
3.7位图索引
3.7.1位图索引的动机
3.7.2压缩位图
3.7.3分段长度编码位向量的操作
3.7.4位图索引的管理
3.7.5习题
3.8小结
3.9参考文献
第4章查询执行
4.1物理查询计划操作符介绍
4.1.1扫描表
4.1.2扫描表时的排序
4.1.3物理操作符计算模型
4.1.4衡量代价的参数
4.1.5扫描操作符的i/o代价
4.1.6实现物理操作符的迭代器
4.2一趟算法
4.2.1一次单个元组操作的一趟算法
4.2.2整个关系的一元操作的一趟算法
4.2.3二元操作的一趟算法
4.2.4习题
4.3嵌套循环连接
4.3.1基于元组的嵌套循环连接
4.3.2基于元组的嵌套循环连接的迭代器
4.3.3基于块的嵌套循环连接算法
4.3.4嵌套循环连接的分析
4.3.5迄今为止的算法的总结
4.3.6习题
4.4基于排序的两趟算法
4.4.1两阶段多路归并排序
4.4.2利用排序去除重复
4.4.3利用排序进行分组和聚集
4.4.4基于排序的并算法
4.4.5基于排序的交和差算法
4.4.6基于排序的一个简单的连接算法
4.4.7简单的排序连接的分析
4.4.8一种更有效的基于排序的连接
4.4.9基于排序的算法的总结
4.4.10习题
4.5基于散列的两趟算法
4.5.1通过散列划分关系
4.5.2基于散列的消除重复算法
4.5.3基于散列的分组和聚集算法
4.5.4基于散列的并、交、差算法
4.5.5散列连接算法
4.5.6节省一些磁盘i/o
4.5.7基于散列的算法的总结
4.5.8习题
4.6基于索引的算法
4.6.1聚簇和非聚簇索引
4.6.2基于索引的选择
4.6.3使用索引的连接
4.6.4使用有序索引的连接
4.6.5习题
4.7缓冲区管理
4.7.1缓冲区管理结构
4.7.2缓冲区管理策略
4.7.3物理操作符选择和缓冲区管理的关系
4.7.4习题
4.8使用超过两趟的算法
4.8.1基于排序的多趟算法
4.8.2基于排序的多趟算法的性能
4.8.3基于散列的多趟算法
4.8.4基于散列的多趟算法的性能
4.8.5习题
4.9小结
4.10参考文献
第5章查询编译
5.1语法分析和预处理
5.1.1语法分析与语法分析树
5.1.2sql的一个简单子集的语法
5.1.3预处理器
5.1.4预处理涉及视图的查询
5.1.5习题
5.2用于改进查询计划的代数定律
5.2.1交换律与结合律
5.2.2涉及选择的定律
5.2.3下推选择
5.2.4涉及投影的定律
5.2.5有关连接与积的定律
5.2.6有关消除重复的定律
5.2.7涉及分组与聚集的定律
5.2.8习题
5.3从语法分析树到逻辑查询计划
5.3.1转换成关系代数
5.3.2从条件中去除子查询
5.3.3逻辑查询计划的改进
5.3.4可结合/可分配的运算符的分组
5.3.5习题
5.4运算代价的估计
5.4.1中间关系大小的估计
5.4.2投影运算大小的估计
5.4.3选择运算大小的估计
5.4.4连接运算大小的估计
5.4.5多连接属性的自然连接
5.4.6多个关系的连接
5.4.7其他运算大小的估计
5.4.8习题
5.5基于代价的计划选择介绍
5.5.1大小参数估计值的获取
5.5.2统计量的计算
5.5.3减少逻辑查询计划代价的启发式估计
5.5.4枚举物理计划的方法
5.5.5习题
5.6连接顺序的选择
5.6.1连接的左右参数的意义
5.6.2连接树
5.6.3左深连接树
5.6.4通过动态规划来选择连接顺序和分组
5.6.5带有更具体的代价函数的动态规划
5.6.6选择连接顺序的贪婪算法
5.6.7习题
5.7物理查询计划选择的完成
5.7.1选取一个选择方法
5.7.2选取连接方法
5.7.3流水操作与物化
5.7.4一元流水运算
5.7.5二元运算的流水操作
5.7.6物理查询计划的符号
5.7.7物理运算的排序
5.7.8习题
5.8小结
5.9参考文献
第6章系统故障对策
6.1可恢复操作的问题和模型
6.1.1故障模式
6.1.2关于事务的进一步讨论
6.1.3事务的正确执行
6.1.4事务的原语操作
6.1.5习题
6.2undo日志
6.2.1日志记录
6.2.2undo日志规则
6.2.3使用undo日志的恢复
6.2.4检查点
6.2.5非静止检查点
6.2.6习题
6.3redo日志
6.3.1redo日志规则
6.3.2使用redo日志的恢复
6.3.3redo日志的检查点
6.3.4使用带检查点redo日志的恢复
6.3.5习题
6.4undo/redo日志
6.4.1undo/redo规则
6.4.2使用undo/redo日志的恢复
6.4.3undo/redo日志的检查点
6.4.4习题
6.5针对介质故障的防护
6.5.1备份
6.5.2非静止转储
6.5.3使用备份和日志的恢复
6.5.4习题
6.6小结
6.7参考文献
第7章并发控制
7.1串行调度和可串行化调度
7.1.1调度
7.1.2串行调度
7.1.3可串行化调度
7.1.4事务语义的影响
7.1.5事务和调度的一种记法
7.1.6习题
7.2冲突可串行化
7.2.1冲突
7.2.2优先图及冲突可串行化判断
7.2.3优先图测试发挥作用的原因
7.2.4习题
7.3使用锁的可串行化实现
7.3.1锁
7.3.2封锁调度器
7.3.3两阶段封锁
7.3.4两阶段封锁发挥作用的原因
7.3.5习题
7.4有多种锁模式的封锁系统
7.4.1共享锁与排他锁
7.4.2相容性矩阵
7.4.3锁的升级
7.4.4更新锁
7.4.5增量锁
7.4.6习题
7.5封锁调度器的一种体系结构
7.5.1插入锁动作的调度器
7.5.2锁表
7.5.3习题
7.6数据库元素的层次
7.6.1多粒度的锁
7.6.2警示锁
7.6.3幻象与插入的正确处理
7.6.4习题
7.7树协议
7.7.1基于树的封锁的动机
7.7.2访问树结构数据的规则
7.7.3树协议发挥作用的原因
7.7.4习题
7.8使用时间戳的并发控制
7.8.1时间戳
7.8.2事实上不可实现的行为
7.8.3脏数据的问题
7.8.4基于时间戳调度的规则
7.8.5多版本时间戳
7.8.6时间戳与封锁
7.8.7习题
7.9使用有效性确认的并发控制
7.9.1基于有效性确认调度器的结构
7.9.2有效性确认规则
7.9.3三种并发控制机制的比较
7.9.4习题
7.10小结
7.11参考文献
第8章再论事务管理
8.1可串行性和可恢复性
8.1.1脏数据问题
8.1.2级联回滚
8.1.3可恢复的调度
8.1.4避免级联回滚的调度
8.1.5基于锁对回滚的管理
8.1.6成组提交
8.1.7逻辑日志
8.1.8从逻辑日志中恢复
8.1.9习题
8.2死锁
8.2.1超时死锁检测
8.2.2等待图
8.2.3通过元素排序预防死锁
8.2.4通过时间戳检测死锁
8.2.5死锁管理方法的比较
8.2.6习题
8.3长事务
8.3.1长事务的问题
8.3.2saga(系列记载)
8.3.3补偿事务
8.3.4补偿事务发挥作用的原因
8.3.5习题
8.4小结
8.5参考文献
第9章并行与分布式数据库
9.1关系的并行算法
9.1.1并行模型
9.1.2一次一个元组的操作的并行
9.1.3整个关系的操作的并行算法
9.1.4并行算法的性能
9.1.5习题
9.2map?rece并行架构
9.2.1存储模式
9.2.2映射函数
9.2.3归约函数
9.2.4习题
9.3分布式数据库
9.3.1数据的分布
9.3.2分布式事务
9.3.3数据复制
9.3.4习题
9.4分布式查询处理
9.4.1分布式连接操作问题
9.4.2半连接化简
9.4.3多个关系的连接
9.4.4非循环超图
9.4.5非循环超图的完全化简
9.4.6为什么完全化简算法有效
9.4.7习题
9.5分布式提交
9.5.1支持分布式原子性
9.5.2两阶段提交
9.5.3分布式事务的恢复
9.5.4习题
9.6分布式封锁
9.6.1集中封锁系统
9.6.2分布式封锁算法的代价模型
9.6.3封锁多副本的元素
9.6.4主副本封锁
9.6.5局部锁构成的全局锁
9.6.6习题
9.7对等分布式查找
9.7.1对等网络
9.7.2分布式散列问题
9.7.3分布式散列的集中式解决方案
9.7.4带弦的圆
9.7.5带弦的圆上的链接
9.7.6使用手指表查找
9.7.7加入新结点
9.7.8当一个端离开网络
9.7.9当一个端崩溃了
9.7.10习题
9.8小结
9.9参考文献
第二部分现代数据库系统专题
第10章信息集成
10.1信息集成介绍
10.1.1为什么要进行信息集成
10.1.2异质性问题
10.2信息集成的方式
10.2.1联邦数据库系统
10.2.2数据仓库
10.2.3mediator
10.2.4习题
10.3基于mediator的系统中的包装器
10.3.1查询模式的模板
10.3.2包装器生成器
10.3.3过滤器
10.3.4包装器上的其他操作
10.3.5习题
10.4基于能力的优化
10.4.1有限的数据源能力问题
10.4.2描述数据源能力的记号
10.4.3基于能力的查询计划选择
10.4.4加入基于成本的优化
10.4.5习题
10.5优化mediator查询
10.5.1简化的修饰符记号
10.5.2获得子目标的回答
10.5.3chain算法
10.5.4在mediator上结合并视图
10.5.5习题
10.6以局部作为视图的mediator
10.6.1lav mediator的动机
10.6.2lav mediator的术语
10.6.3扩展解决方案
10.6.4合取查询的包含
10.6.5为什么包含映射测试有效
10.6.6发现mediator查询的解决方法
10.6.7为什么lmss定理能成立
10.6.8习题
10.7实体解析
10.7.1决定是否记录代表一个共同实体
10.7.2合并相似记录
10.7.3相似性和合并函数的有用性质
10.7.4icar记录的r?swoosh算法
10.7.5为什么r?swoosh算法会有效
10.7.6实体解析的其他方法
10.7.7习题
10.8小结
10.9参考文献
第11章数据挖掘
11.1频繁项集挖掘
11.1.1市场-购物篮模型
11.1.2基本定义
11.1.3关联规则
11.1.4频繁项集的计算模型
11.1.5习题
11.2发现频繁项集的算法
11.2.1频繁项集的分布
11.2.2寻找频繁项集的朴素算法
11.2.3a?priori算法
11.2.4a?priori算法的实现
11.2.5更好地使用主存
11.2.6何时使用pcy算法
11.2.7多级算法
11.2.8习题
11.3发现近似的商品
11.3.1相似度的jaccard度量
11.3.2jaccard相似度的应用
11.3.3最小散列
11.3.4最小散列与jaccard相似度
11.3.5为什么能用最小散列估计相似度
11.3.6最小散列的实现
11.3.7习题
11.4局部敏感散列
11.4.1lsh实例:实体分辨
11.4.2标签的局部敏感散列
11.4.3最小散列法和局部敏感散列的结合
11.4.4习题
11.5大规模数据的聚簇
11.5.1聚簇的应用
11.5.2距离的定义
11.5.3凝聚式聚簇
11.5.4k?means算法
11.5.5大规模数据的k?means方法
11.5.6内存中满载点后的处理过程
11.5.7习题
11.6小结
11.7参考文献
第12章数据库系统与互联网
12.1搜索引擎体系结构
12.1.1搜索引擎的组成
12.1.2web爬虫
12.1.3搜索引擎中的查询处理
12.1.4对网页进行排名
12.2用于识别重要网页的pagerank
12.2.1pagerank的直观思想
12.2.2pagerank的递归公式——初步尝试
12.2.3爬虫陷阱和死角
12.2.4考虑爬虫陷阱和死角的pagerank
12.2.5习题
12.3特定主题的pagerank
12.3.1“远距离移动”集
12.3.2计算主题相关的pagerank
12.3.3链接作弊
12.3.4主题相关的pagerank和链接作弊
12.3.5习题
12.4数据流
12.4.1数据流管理系统
12.4.2数据流应用
12.4.3数据流数据模型
12.4.4数据流转换为关系
12.4.5关系转换为数据流
12.4.6习题
12.5数据流挖掘
12.5.1动机
12.5.2统计二进制位数
12.5.3统计不同元素的个数
12.5.4习题
12.6小结
12.7参考文献

‘贰’ 数据库管理系统能实现对数据库中数据的查询、插入、修改和删除,这类功能称为()。

【答案】:C
C[解析]数据操纵功能可以实现对数据的查询、插入、修改和删除。

‘叁’ 学籍管理系统 数据库程序编写!!

一. 应用实例的分析与开发

---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。

---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。

---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。

---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:

Option Explicit
Private m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
' 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......
' 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
' 建立事务性组件
Dim ObjConn As ADODB.Connection
' 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
' 根据查询要求(查询所有课程、查询特定学期的所有课程、
查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term <> "all") Then
query="select Client_Name,Client.Client_No,Courses.subject,
stu_score.score,stu_score.term,sub_type"
query = query & " from client,stu_score,courses"
query=query&"where client.client_no=stu_score.client_no
and stu_score.subject=courses.subject
and courses.term=stu_score.term
and courses.term='" & m_Term & "'
and Client.Client_no='" & m_StuNo & "'"
End If
......
ObjRecordset.Open query, ObjConn
' 进行数据库查询
ObjContext.SetComplte
' 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
' 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
' 事务失败处理
End Function
' 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
< %@ LANGUAGE="VBSCRIPT" % >
< HTML >
< HEAD >
< META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" >
< TITLE >Show To Teacher< /TITLE >
< /HEAD >
< BODY background="images/bk.GIF" >
< %
dim objResult
set objResult=Server.CreateObject("Display.Score")
dim Term,Subject
Term=Cstr(Request.Form("Term"))
Subject=Cstr(Request.Form("Subject"))
objResult.term=Request.Form("term")
objResult.Subj=RequestForm("Subject")
objresult.class=Request.Form("Class")
dim Scores
set Scores=objResult.RequeryAllScores
% >
' 以下代码为显示处理的结果
< div align="center" >< center >
......
< table border="0" cellpadding="0"
cellspacing="1" width="100" >< tr >
< %For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#004080" >
< strong >< font color="#FFFFFF" > < small >
< %=scores(I).Name% >< /font > < /strong >< /td >
< %NEXT
Do While (Not Scores.EOF)% >
< /tr >< tr >
< % For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#ACE8F9" >< p align="center" >
< %= Scores(I).Value% >< /td >
< %Next
Scores.MoveNext% >< /tr >
< %Loop% >
< %Scores.close
' 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % >
' 释放对象
< /table >< /center >< /div >
< /BODY >
< /HTML >
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:

二. 开发过程中辅助工具的使用

---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。

---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。

---- 1. 利用青鸟CASE工具编写需求分析文档

---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。

---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:

数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。

模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图

---- 2. 利用S-Designer进行数据库设计

---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。

---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。

---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。

---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:

---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。

---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。

---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。

‘肆’ 急求一份完整的数据库课程设计图书管理系统(要求用VB 以及SQL-server制作)

1、如果论文页码不多,前置部分并不一定要有,或只加个封面即可。
2、封面、标题等不要太花哨,一般以简洁大方为好。 3、如果论文很厚实,可考虑正反面排版打印。 4、页码较多的论文,可考虑用页眉标注论文标题及层次标题,如单页用文章标题,双页用层次标题。 5、不管论文长短,页码均需标注。页码标注由正文的首页开始,作为第1页,可以标注在页眉或页脚的中间或右边。论文的前置部分、封三和封底不编入页码。附件部分一般单独编排页码。 6、封底底色与封面一致为好,若用底图则与封面应有相关性。 7、若用订书钉装订,两枚钉应分别居于上下沿四分之一处,左缩进1厘米处
可以发你一份参考

‘伍’ (30) 关系数据库管理系统能实现的专门关系运算包括______。

答案为B. 选择、投影、连接。

关系的基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、自然连接、除法、外连接),有些查询需要几个基本运算的组合,要经过若干步骤才能完成。

在关系数据库管理系统中,数据库的全部数据及其相互联系都被组织成关系,即二维表的形式。关系数据库系统提供一种完备的高级关系运算,支持对数据库的各种操作。关系模型有严格的数学理论,使数据库的研究建立在比较坚实的数学基础上。

(5)管理系统数据库的实现扩展阅读:

数据库中的专门关系运算:

1、选择:

选择的逻辑表达式的基本形式为:XθY。其中θ代表比较运算符,它可以是比较运算符。X、Y是属性名或常量或简单函数。它是从行的角度进行的运算。

2、投影:

关系R上的投影是从关系R中选出若干属性列组成新的关系。它是从列的角度进行的运算。由于投影取消了某些列之后可能出现重复的行,应取消这些完全相同的行。

3、自然连接:

自然连接是一种特殊的等值连接,它要求两个关系进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。一般的连接是从行的角度进行操作,自然连接需要取消重复列,所以它是从行和列的角度进行操作。

4、除法:

设关系R除以关系S的结果为关系T,则关系T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。

5、外连接:

两个关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。

此时,关系R和S可能有在公共属性上不相等的元组,从而造成R或S中元组的舍弃,这些舍弃的元组被称为悬浮元组。

如果把悬浮元组也保存在结果关系中,而在其他属性上填空值,那么这种连接就叫做外连接。

参考资料来源:网络-关系运算

‘陆’ 数据库系统的独立性是怎样实现的

数据独立性是由DBMS的二级映象功能来保证的。数据库系统通常采用外模式、模式和内模式三级结构,数据库管理系统在这三级模式之间提供了外模式/模式和模式/内模式两层映象。

当整个系统要求改变模式时(增加记录类型、增加数据项)时,由DBMS对各个外模式/模式的映象作相应改变,可以使外模式保持不变,应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据的逻辑独立性。

当数据的存储结构改变时,由DBMS对模式/内模式映象作相应改变,可以使模式不变,从而应用程序也不必改变,保证了数据的物理独立性。

(6)管理系统数据库的实现扩展阅读

数据独立性的作用

1、数据与程序的独立

把数据的定义从程序中分离出去,加上数据的存取又由DBMS负责,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。可以说数据处理的发展史就是数据独立性不断进化的历史。在手工管理阶段,数据和程序完全交织在一起,没有独立性可言,数据结构作任何改动,应用程序也需要做相应的修改。

2、独立发展

文件系统出现后,虽然将拆明两者分离,但实际上应用程序中依扒念然要反映文件在存储设备上的组织方法、存取方法等物理细节,因而只要数据作了任何修改春御困,程序仍然需要作改动。而数据库系统的一个重要目标就是要使程序和数据真正分离,使它们能独立发展。

热点内容
phpphpini配置 发布:2025-06-26 14:28:20 浏览:306
移动公司的wifi密码是多少 发布:2025-06-26 14:22:55 浏览:550
苹果怎么加密微信 发布:2025-06-26 14:22:49 浏览:253
什么是邮箱服务器地址 发布:2025-06-26 14:21:18 浏览:949
iphone访问限制密码是什么情况 发布:2025-06-26 13:57:13 浏览:349
脚本逐字稿 发布:2025-06-26 13:56:17 浏览:781
superchargerv6脚本 发布:2025-06-26 13:45:26 浏览:82
c语言整型范围 发布:2025-06-26 13:41:09 浏览:874
不开机箱如何知道硬件配置 发布:2025-06-26 13:30:58 浏览:814
编写安卓项目要注意什么 发布:2025-06-26 13:26:19 浏览:574