中科大软院金老师的数据库实验一
数据库实验报告(SQL)

四川师范大学计算机学院实验报告册院系名称:计算机科学学院课程名称:数据库原理概论实验学期2013 年至2014 年第二学期专业班级:网络工程3班姓名:学号:指导教师:**实验最终成绩:《数据库原理》实验大纲课程总学时:64学分:2实验学时:32 实验个数: 7 实验学分: 1课程性质:(专业必修)适用专业:计算机软件工程,计算机科学技术,网络工程,电子商务教材及参考书:数据库系统概论大纲执笔人:俞晓大纲审定人:一、实验课的性质与任务数据库技术是计算机科学技术中发展最快的领域之一,也是应用最广的技术之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。
本实验课程主要是在SQL SERVER 下实现SQL语言的基本操作:建立、修改、删除表格等数据库对象,插入、修改、删除表格中的数据,对数据做多种查询。
并熟悉使用SQL SERVER的系统工具创建数据库,用户等。
最后用VB连接SQL SERVER 做一个简单的数据库系统。
该课程注重教学体系的严密性、教学内容的实用性、知识体系的扩展性。
通过练习,提高学生的动手能力,使学生能较熟练的在SQL SERVER 数据库管理系统中实现数据管理和维护。
二、实验课程目的与要求1.实验目的:本课程的目的和任务是使学生全面地了解和掌握数据库的原理,SQL SERVER系统的基本操作和应用技术,以适应社会对数据库技术应用的大量需求。
2.实验要求:1)实验安排在上机时间进行。
2)实验以前,学生应对实验设计的相关知识点和相关设计技术有所了解3)每个实验要求写出实验报告(实验报告包括:实验内容、目的、实现方法、调试结果)四、实验内容安排:实验1 熟悉SQL SERVER的环境(操作性实验2学时)实验目的了解SQL Server数据库的各个工具软件实验内容使用SQL Server的相关工具,其中包括查询分析器和企业管理器,在查询分析器里写简单的SQL语句,在企业管理器中建立表格等。
中科大软院金老师的数据库实验一

第一次实验报告1、实验任务根据下面的需求描述,使用Sybase Power Designer设计相应的数据库概念模型,并转换成Oracle或MS SQL Server上的物理数据库结构:某银行准备开发一个银行业务管理系统,通过调查,得到以下的主要需求:银行有多个支行。
各个支行位于某个城市,每个支行有唯一的名字。
银行要监控每个支行的资产。
银行的客户通过其身份证号来标识。
银行存储每个客户的姓名及其居住的街道和城市。
客户可以有帐户,并且可以贷款。
客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。
银行员工也通过身份证号来标识。
员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。
每个支行的管理机构存储每个员工的姓名、电话号码、家庭地址及其经理的身份证号。
银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。
银行提供两类帐户——储蓄帐户和支票帐户。
帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。
每个帐户被赋以唯一的帐户号。
银行记录每个帐户的余额、开户的支行以及每个帐户所有者访问该帐户的最近日期。
另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。
每笔贷款由某个分支机构发放,能被一个或多个客户所共有。
每笔贷款用唯一的贷款号标识。
银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。
虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。
对每次的付款需要记录日期和金额。
2、实验过程(1)确定实体和属性由上面的需求描述我们可以很容易得出以下几个实体:●员工(身份证号,姓名,电话号码,家庭地址,开始工作日期)●存储账户(账户号,余额,利率)●支票账户(账户号,余额,透支额)●客户(身份证号,姓名,街道,城市)●支行(支行名称,城市,资产)●贷款(贷款号,总额)●支付(日期,金额)图1PS:1、在此ER图中我没有设计账户类,然后派生出存储账户和支票账户,因为在客户的需求中,只有两种账户类型,除了支票账户类型就是存储账户类型,没有所谓的“一般的账户”,所以就不设计“账户”实体。
数据结构实验-集合的并交差运算实验报告

实验报告实验课程:数据结构实验项目:实验一集合的并交差运算专业:计算机科学与技术班级:姓名:学号:指导教师:目录一、问题定义及需求分析(1)实验目的(2)实验任务(3)需求分析二、概要设计:(1)抽象数据类型定义(2)主程序流程(3) 模块关系三、详细设计(1)数据类型及存储结构(2)模块设计四、调试分析(1)调试分析(2)算法时空分析(3)经验体会五、使用说明(1)程序使用说明六、测试结果(1)运行测试结果截图七、附录(1)源代码一、问题定义及需求分析(1)实验目的设计一个能演示集合的并、交、差运算程序。
(2)实验任务1)采用顺序表或链表等数据结构。
2)集合的元素限定为数字和小写英文字母。
(3)需求分析:输入形式为:外部输入字符串;输入值限定范围为:数字和小写英文字母;输出形式为:字符集;程序功能:计算两个集合的交、并、差以及重新输入集合功能;二、概要设计:(1)抽象数据类型定义:线性表(2)主程序流程:调用主菜单函数初始化两个线性表作为集合给两个集合输入数据输出集合数据元素信息另初始化两个线性表创建选择功能菜单界面通过不同选项调用不同功能函数在每个功能函数里面加结束选择功能,实现循环调用功能菜单计算完毕退出程序;(3)模块关系:差运算并运算交运算新建集合结束/返回结束三、详细设计抽象数据类型定义:typedef struct{ElemType *elem;int length;int listsize;}SqList;存储结构:顺序表;模块1-在顺序表的逻辑为i的位置插入新元素e的函数;算法如下:/**在顺序表的逻辑为i的位置插入新元素e的函数**/Status ListInsert_Sq(SqList &L,int i,ElemType e){ElemType *newbase,*p,*q;if(i < 1 || i > L.length + 1) return 0; //i的合法值为(1 <= i <= L.length_Sq(L) + 1)if(L.length >= L.listsize){ //当前储存空间已满,增加分配newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(ElemType));if(!newbase) exit(-1); //储存分配失败L.elem = newbase; //新基址L.listsize += LISTINCREMENT; //增加储存容量}q = &(L.elem[i - 1]); //q为插入位置for(p = &(L.elem[L.length - 1]); p >= q; --p)(p + 1) = p; //插入位置及之后的元素往右移q = e; //插入e++L.length; //表长加1return 1;}模块二在顺序线性表L中查找第1个与e满足compare()的元素位序,若找到,则返回其在L中的位序,否则返回0算法如下:/**在顺序线性表L中查找第1个与e满足compare()的元素位序,若找到,则返回其在L中的位序,否则返回0**/int LocateElem_Sq(SqList L,ElemType e,Status(* compare)(ElemType,ElemType)){ElemType *p;int i;i = 1; //i的初值为第1个元素的位序p = L.elem; //p的初值为第1个元素的储存位置while(i <= L.length && !(* compare)(*p++,e))++i; //从表L中的第一个元素开始与e比较,直到找到L中与e相等的元素时返回该元素的位置if(i <= L.length) return i; //若i的大小小于表长,则满足条件返回ielsereturn 0; //否则,i值不满足条件,返回0}模块三集合交运算算法如下:/**求集合的交集的函数**/void Mix_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0; //将表Lc的长度设为0for(i = 1; i <= La.length; i++){ //依次查看表La的所有元素elem = La.elem[i-1]; //将表La中i位置的元素赋值给elemif(LocateElem_Sq(Lb,elem,Equal)) //在表Lb中查找是否有与elem相等的元素ListInsert_Sq(Lc,Lc.length+1,elem); //将表La与Lb 中共同的元素放在Lc中}}模块四集合并运算算法如下:/**求集合的并集的函数**/void Union_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length=0; //将表Lc的长度初设为0for(i = 0; i < La.length; i++) //先将表La 的元素全部复制到表Lc中Lc.elem[Lc.length++]=La.elem[i];for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //依次将表Lb 的值赋给elemif(!LocateElem_Sq(La,elem,Equal)) //判断表La 中是否有与elem相同的值ListInsert_Sq(Lc,Lc.length+1,elem); //若有的话将elem放入表Lc中}}模块五集合的差运算算法如下:/**求集合的差集函数**/void Differ_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0;for(i = 1; i <= La.length; i++){elem = La.elem[i-1]; //把表La 中第i个元素赋值给elemif(!LocateElem_Sq(Lb,elem,Equal)) //判断elem在表Lb中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem); //若有,则把elem放入表Lc中,否则,就不存放}for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //把表Lb 中第i个元素赋值给elemif(!LocateElem_Sq(La,elem,Equal)) //判断elem在表La中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem); //若有,则把elem放入表Lc中,否则,就不存放}}四、调试分析问题分析及解决:首先,在编写程序时没有设置线性表的初始长度,导致集合元素输入错误;然后通过#define LIST_INIT_SIZE 100和#define LISTINCREMENT 10解决;时空分析:int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))时间复杂度为O(n);Status ListInsert_Sq(SqList &L,int i,ElemType e) 时间复杂度为O(n);void Union_Sq(SqList La,SqList Lb,SqList &Lc) 时间复杂度为O(m*n);void Mix_Sq(SqList La,SqList Lb,SqList &Lc) 时间复杂度为O(m*n);void Differ_Sq(SqList La,SqList Lb,SqList &Lc) 时间复杂度为O(2*m*n);改进设想:当同时求两个以上的结合间的运算是需要先进性两个集合间的运算,然后在于另外的集合进行运算;若要同事进行多个集合的运算需要建立多个顺序表;经验体会:顺序表使用起来比较简单,但长度不可随意变化,适用于大量访问元素,而不适用于大量增添和删除元素;在内存中存储地址连续;五、使用说明第一步:点击运行按钮;第二步: 根据提示输入集合A(可以连续输入,只限输入小写字母和数字);第三步:程序自动显示输入结果;第四步:输入集合B(同第二步);第五步:跳出主菜单界面;第六步:根据选项输入对应运算项的数字序号;第七步:显示运算结果,并可继续进行选择运算还是退出;第八步:若继续运算则返回主菜单,否则退出;第九步:循环第六、七、八步,直至选择退出;六、测试结果输入界面:并运算结果:交运算结果:差运算结果:重新建立集合并运算:七、附录#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100//初始表空间大小#define LISTINCREMENT 10//表长增量typedef int Status; /**Status是函数类型**/typedef char ElemType;/*ElemType类型根据实际情况而定,这里假设为char*/typedef struct{ElemType *elem; /**储存空间基地址**/int length; /**当前长度**/int listsize;/**当前分配的储存容量(以sizeof(Elemtype)为单位)**/}SqList;SqList La,Lb,Lc,Ld;/**定义全局变量**//**构造一个空的线性表L**/Status InitList_Sq(SqList &L){L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if(!L.elem) exit(-1); /**储存分配失败**/L.length = 0;L.listsize = LIST_INIT_SIZE;/**初始储存容量**/return 1;}/**在顺序表的逻辑为i的位置插入新元素e的函数**/Status ListInsert_Sq(SqList &L,int i,ElemType e){ElemType *newbase,*p,*q;if(i < 1 || i > L.length + 1)return 0;if(L.length >= L.listsize)//当前储存空间已满,增加分配{newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT )*sizeof(ElemType));if(!newbase) exit(-1);//储存分配失败L.elem = newbase;L.listsize += LISTINCREMENT;//增加储存容量}q = &(L.elem[i - 1]);//q为插入位置for(p = &(L.elem[L.length - 1]); p >= q; --p)*(p + 1) = *p;//插入位置及之后的元素往右移*q = e;//插入e++L.length;return 1;}/**创建一个线性表,输入数据**/void CreateList_Sq(SqList &L){ElemType ch='\0';int inlist =0,j;while((ch) != '\n'){scanf("%c",&ch);//输入数据for(j = 0; j < L.length; j++)if(ch == L.elem[j])//判断表L中是否有与ch相等的元素 {inlist = 1; //若有,则inlist置1break; //跳出本轮循环}elseinlist =0; //否则inlist为0if(!inlist && ch != '\n')//若inlist为0且ch不为”\n” ListInsert_Sq(L,L.length+1,ch);//则将ch存入表L中 }}/*判断两元素是否相等,若相等则返回1;否则返回0*/Status Equal(ElemType a,ElemType b){if(a == b)return 1;//相等,返回1elsereturn 0;//否则,返回0}/*在顺序线性表L中查找第1个与e满足compare()的元素位序,若找到,则返回其在L中的位序,否则返回0*/int LocateElem_Sq(SqList L,ElemType e,Status(* compare)(ElemType,ElemType)){ElemType *p;int i;i = 1;p = L.elem;//p的初值为第1个元素的储存位置while(i <= L.length && !(* compare)(*p++,e))//循环查找表L 找出其中与e相等的元素的位置++i;if(i <= L.length)//若i小于表长return i;//则i满足条件,返回i的值elsereturn 0;//否则返回0}/*销毁线性表的函数*/Status Clear_Sq(SqList &L){ElemType elem;free(L.elem);L.elem = NULL;return 1;}/*打印顺序表函数*/void Print_Sq(SqList L){int i;for(i = 0; i < L.length; i++)printf("%2c",L.elem[i]);//通过for循环将表元素全部输出 if(L.length == 0) printf("空集");//若表长为0,则输出空表 printf("\n\t\t\t此集合中的个数 n = %d\n\n",L.length);}/*求集合的并集的函数*/void Union_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length=0; //将表Lc的长度初设为0for(i = 0; i < La.length; i++) //先将表La的元素全部复制到表Lc中Lc.elem[Lc.length++]=La.elem[i];for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //依次将表Lb 的值赋给elemif(!LocateElem_Sq(La,elem,Equal)) //判断表La 中是否有与elem相同的值ListInsert_Sq(Lc,Lc.length+1,elem); //若有的话将elem放入表Lc中}}/*求集合的交集的函数*/void Mix_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0; //将表Lc的长度设为0for(i = 1; i <= La.length; i++){ //依次查看表La的所有元素elem = La.elem[i-1]; //将表La中i位置的元素赋值给elemif(LocateElem_Sq(Lb,elem,Equal)) //在表La中查找是否有与elem相等的元素ListInsert_Sq(Lc,Lc.length+1,elem); //将表La与Lb中共同的元素放在Lc中}}/*求集合的差集函数*/void Differ_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0;for(i = 1; i <= La.length; i++){elem = La.elem[i-1]; //把表La中第i个元素赋值给elemif(!LocateElem_Sq(Lb,elem,Equal)) //判断elem在表Lb中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem);//若有,则把elem放入表Lc中,否则,就不存放}for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //把表Lb中第i个元素赋值给elem if(!LocateElem_Sq(La,elem,Equal)) //判断elem在表La中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem); //若有,则把elem放入表Lc中,否则,就不存放}}void Index_Sq(){//主菜单函数char s;int l=1;InitList_Sq(La);//初始化表Laprintf("\n\t\t 请输入集合A:");CreateList_Sq(La);//创建表Laprintf("\t\t\t集合A为");Print_Sq(La);printf("\n\n");InitList_Sq(Lb);//初始化表Lbprintf("\t\t 请输入集合B:");CreateList_Sq(Lb);//创建表Lbprintf("\t\t\t集合B为");Print_Sq(Lb);printf("\n\n");InitList_Sq(Lc);//初始化表LcInitList_Sq(Ld);//初始化表Ldwhile(l){printf("\t\t ******* 请输入您的操作选项 1、2、3、4. ****** \n\n");printf("\t\t 1、进行集合的并运算\n");printf("\t\t 2、进行集合的交运算\n");printf("\t\t 3、进行集合的差运算\n");printf("\t\t 4、重新建立两个集合\n");printf("\t\t\t");scanf("%c",&s);switch(s){case '1' : system("cls");Union_Sq(La,Lb,Lc);//调用集合的并运算函数printf("\t\t\t集合A与集合B的并集为:");print_Sq(Lc);printf("\n");break;case '2' :system("cls");Mix_Sq(La,Lb,Lc);//调用集合的交集运算函数printf("\t\t\t集合A与集合B的交集为:");print_Sq(Lc);printf("\n");break;case '3' : system("cls");Differ_Sq(La,Lb,Lc);//调用集合的差集运算函数 printf("\t\t\t集合A与集合B的差集为:");print_Sq(Lc);printf("\n");break;case '4' :system("cls");Clear_Sq(La);//销毁表LaClear_Sq(Lb);//销毁表LbClear_Sq(Lc);//销毁表LcClear_Sq(Ld);//销毁表Ldgetchar();Index_Sq();//递归调用此函数break;default : printf("\t\t\t#\tenter data error!\n");printf("\n");}printf("\t\t 继续计算请输入1,停止计算请输入0 \n");printf("\t\t\t");scanf("%d",&l);getchar();system("cls");}printf("\n\t\t**************** 谢谢使用!*****************\n");}int main(){printf("\t\t************* 欢迎使用集合操作运算器************\n");Index_Sq();//调用主菜单函数return 0;}。
2012-2013-1中科大软院课表 数目

机械工业出版社
9787111239352
8
随机过程及其应用
随机过程
方兆本、缪柏其
中国科学技术大学出版社
7-312-00379-6/O.122
9
组合数学
Introductory combinatorics
Richard A. Brualdi
机械工业出版社
7-111-15915-2
数据仓库与数据挖掘/嵌入式操作系统(13-20周)
J2EE/.NET/面向对象/设备驱动程序设计/EDA(1、2、3节;2-4周,6-10周)
轻量级J2EE/SOA方法与实践/网络程序设计/WEB安全实践/敏捷开发/WinCE应用/可编程器件(1、2、3节;12-19周)
信息技术服务管理(1、2、3、4节;3周)
1、9787121112805 2、9787121110085
1,65 2,59
16
软件体系结构
Software Architecture
Mary Shaw
McGraw-Hill,清华大学出版社影印版
9787302145509
29.8
17
多媒体系统和应用
无指定教材,由教师课上提供参考资料
18
程序设计与计算机系统
2012-2013-1课程表(苏州)
星期一
星期二
星期三
星期四
星期五
星期六
星期日
上
午
1
英语1班/英语2班(3-4,6-19周)
实用英语1班(3-4,6-11周)
基础日语1班/基础日语2班(3-4,6-15周)
英语3班/英语4班(3-4,6-19周)
Database design--Part 1_ Schema Design

Advanced Database Technologies
金培权(jpq@)
问题的提出
如何把现实世界表达成数据库模式? 针对一个具体应用,应该如何构造一个适
合于它的数据库模式?
这是数据库的逻辑设计问题 数据库的模式设计理论是数据库逻辑设计
R的每个关系r是它在Ri上的投影的自然连接 无损连接保证R分解后还可以通过Ri恢复
Advanced Database Technologies
13
金培权(jpq@)
4、无损连接概念
我们记 m r Ri r 则对于关系模式R关于F的无损连接条件
的理论基础
Advanced Database Technologies
2
金培权(jpq@)
将现实数据特征 转换为合理的数 据库模式结构
Advanced Database Technologies
3
金培权(jpq@)
本章主要内容
关系模式的设计问题 关系模式的分解 关系模式的范式 模式分解的算法
模式分解的含义
Advanced Database Technologies
10
金培权(jpq@)
2、模式分解的标准
具有无损连接 要保持函数依赖 既具有无损连接,又要保持函数依赖
Advanced Database Technologies
11
金培权(jpq@)
19
金培权(jpq@)
(2)不保持函数依赖带来的问题
R(city, street, zip), F={(city,street)→zip, zip→city} 分解为p={R1(street,zip),R2(city,zip)} 在R1中插入(’a’,’100081’)和(’a’,’100082’) R2中插入(’Beijing’,’100081’)和(’Beijing’,’100082’) R1 R2:得到
MySQL数据库应用实战教程教案

2.4.2输入相关的常见问题(10分钟)
1.只读模式和编辑模式
2.空和空串(或数字0),强调空和空串的区别
3.修改主键值,简单演示或讲解一下,说明过程的复杂性和危害性
2.4.3【实训2–3】数据查询(5分钟):直接演示,不在机房安排学生做
将【实训2–3】布置为作业
MySQL数据库应用实战教程教案
教案(
教师姓名
XX老师
授课形式
讲授+实践
授课时数
2
授课日期
授课班级
202X年月日第周星期第节XX01班级
202X年月日第周星期第节XX02班级
授课章节名称
及教学内容、
目的、要求
章节名称:
项目1了解数据库——气象记录数据库
教学内容:
任务1认识MySQL
任务2安装、配置和使用MySQL
1.2.2 MySQL程序介绍(5分钟)
介绍安装的3个程序:MySQL服务器、MySQL命令行客户端和MySQL配置工具
1.2.3使用MySQL命令行客户端(30分钟)
仔细讲清楚Windows的命令提示符的启动和使用,建议只讲Win+R这一种办法
运行MySQL命令行客户端,执行quit和show databases;命令,说明结束分号的重要性
任务3创建数据库和数据表
任务4操纵数据和查询数据
任务5理解主键和外键
目的、要求:
1.学会建立表之间的联系
2.学会插入数据时,正确输入外键的值
3.正确理解主键和外键
教学重点
教学难点
重点:
创建表和建立表之间的主外键联系
插入数据时,如何保证外键值的正确性
数据库原理及应用教程(MySQL版)-实验素材及答案

数据库原理及应用教程(MySQL版)- 实验素材及答案第一章数据库的基本概念实验素材•数据库系统是由数据库和数据库管理系统(DBMS)组成的,数据库是用于存储和管理数据的集合,而DBMS是用于管理数据库的软件。
•数据是描述事物的符号记录,可以是数字、文字、图像等形式。
•数据库的特点包括永久存储、面向用户的数据抽象、数据的共享与并发控制等。
•数据库的应用领域非常广泛,包括企业管理、电子商务、金融服务等。
实验答案1.数据库系统是由数据库和数据库管理系统组成的。
数据库是用于存储和管理数据的集合,而数据库管理系统是用于管理数据库的软件。
2.数据是描述事物的符号记录,可以是数字、文字、图像等形式。
3.数据库的特点包括永久存储、面向用户的数据抽象、数据的共享与并发控制等。
4.数据库的应用领域非常广泛,包括企业管理、电子商务、金融服务等。
第二章数据库的逻辑结构实验素材•数据库的逻辑结构包括三层模式,分别是外模式、概念模式和内模式。
•外模式是用户对数据库的视图,它描述了用户所需要的数据的逻辑结构。
•概念模式是全局的逻辑结构描述,它描述了整个数据库的逻辑结构,是数据库设计的产物。
•内模式是数据库在存储介质上的存储结构,它是数据库管理系统的内部表示,对用户不可见。
实验答案5.数据库的逻辑结构包括三层模式,分别是外模式、概念模式和内模式。
6.外模式是用户对数据库的视图,它描述了用户所需要的数据的逻辑结构。
7.概念模式是全局的逻辑结构描述,它描述了整个数据库的逻辑结构,是数据库设计的产物。
8.内模式是数据库在存储介质上的存储结构,它是数据库管理系统的内部表示,对用户不可见。
第三章数据库的物理结构实验素材•数据库的物理结构指的是数据在存储介质上的存储方式,包括存储单位、磁盘存储和索引结构等。
•存储单位是数据库管理系统分配存储空间的最小单元,通常是一个数据块。
•数据库的物理结构设计是为了提高数据库的访问效率,如磁盘存储可以减少磁盘I/O操作,索引结构可以加快数据的查找速度。
中科大软院算法导论-第五次实验报告-最长公共子序列实验报告

第五次实验报告——最长公共子序列的生成算法1.1算法应用背景最长公共子序列是一个序列S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则S称为已知序列的最长公共子序列。
而最长公共子串(要求连续)和最长公共子序列是不同的。
最长公共子序列是一个十分实用的问题,它可以描述两段文字之间的“相似度”,即它们的雷同程度,从而能够用来辨别抄袭。
对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列外的部分提取出来,这种方法判断修改的部分,往往十分准确。
简而言之,百度知道、百度百科都用得上。
1.2算法原理若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。
例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。
例:∑= {x, y, z} ,A = x y z y x z x zx x x 是长度为3 的子序列x z y z x 是长度为5 的子序列例:A = x y z y x z x z,B = x z y x x y z xx x x是长度为3 的公共子序列x z y z 是长度为4 的公共子序列x z y x x z 是长度为6 的最长公共子序列1.3算法描述记L n,m为序列A n和B m的最长公共子序列长度,则L i,j为序列A i和Bj的最长公共子序列的长度。
根据最长公共子序列的性质,则得到:阶段的划分和最长公共子序列长度的获取第一阶段:计算A1和Bj的最长公共子序列的长度L1,j ,j=1,2,…m第二阶段:计算A2和B j的最长公共子序列的长度L2,j, j=1,2,…m第n 阶段:计算A n和B j的最长公共子序列的长度L n,j, j=1,2,…m第n 阶段的L m,n便是序列A n和B m的最长公共子序列的长度为了得到A n和B m最长公共子序列,设置一个二维的状态字数组s i,j,在上述每一个阶段计算L n,j过程中,根据公共子序列的性质则有按照如下方法把搜索状态登记于状态字s i,j中:s i,j =1 a i=b js i,j =2 a i≠b j L i-1,j>= L i,j-1s i,j =3 a i≠b j L i-1,j< L i,j-1设L n,m=k,S k=c1c2……c k是序列A n和B m的长度为k的最长公共子序列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次实验报告
1、实验任务
根据下面的需求描述,使用Sybase Power Designer设计相应的数据库概念模型,并转换成Oracle或MS SQL Server上的物理数据库结构:
某银行准备开发一个银行业务管理系统,通过调查,得到以下的主要需求:
银行有多个支行。
各个支行位于某个城市,每个支行有唯一的名字。
银行要监控每个支行的资产。
银行的客户通过其身份证号来标识。
银行存储每个客户的姓名及其居住的街道和城市。
客户可以有帐户,并且可以贷款。
客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。
银行员工也通过身份证号来标识。
员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。
每个支行的管理机构存储每个员工的姓名、电话号码、家庭地址及其经理的身份证号。
银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。
银行提供两类帐户——储蓄帐户和支票帐户。
帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。
每个帐户被赋以唯一的帐户号。
银行记录每个帐户的余额、开户的支行以及每个帐户所有者访问该帐户的最近日期。
另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。
每笔贷款由某个分支机构发放,能被一个或多个客户所共有。
每笔贷款用唯一的贷款号标识。
银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。
虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。
对每次的付款需要记录日期和金额。
v1.0 可编辑可修改
2、实验过程
(1)确定实体和属性
由上面的需求描述我们可以很容易得出以下几个实体:
●员工(身份证号,姓名,电话号码,家庭地址,开始工作日
期)
●存储账户(账户号,余额,利率)
●支票账户(账户号,余额,透支额)
●客户(身份证号,姓名,街道,城市)
●支行(支行名称,城市,资产)
●贷款(贷款号,总额)
●支付(日期,金额)
图1
PS:
1、在此ER图中我没有设计账户类,然后派生出存储账户和支票账户,因为在客户的需求中,只有两种账户类型,除了支票账户类型就是存储账户类型,没有所谓的“一般的账户”,所以就不
设计“账户”实体。
2、在此ER图也没有经理实体,因为员工实体对自己的1对多关系是可以体现出某一个员工是不是经理的,如此便可以不用经理实体。
3、在存储账户和支票账户中没有加入发行他们的支行名称,这是因为这两种账户与分行的关系的多对1,在转换成关系模式的时候是会自动加上分行名称的。
4、还有若实体的设计,将联系的属性放到实体内。
依靠以上几点我们可以减少两个实体,和一个属性,是符合我们设计“实体尽量少,联系的属性尽量放在实体内”的原则的、(2)确定联系和联系属性
由需求的描述我们也可以很快的得到联系及其属性:
●客户-贷款(多对多)
●支行-员工(1对多)
●支行-存储账户(1对多)
●支行-支票账户(1对多)
●贷款-支付(1对多)
●贷款-支行(多对1)
●领导(1对多)
●客户-员工(服务类型)(多对多)
●客户-账户(最近访问时间)(多对多)
对于客户-员工与客户-账户的属性由于是发生联系才有的所以不能放进实体里面。
图2
(3)E R图如下
图三
(4)构建物理模型(使用DBMS:SQL Server 2005版本)此处就省略步骤了,实验PPT已经说得很清楚。
直接上图
图4
在产生PDM后,可以通过Database->Generate Database->Preview
得到可以在SQL Server 2005中执行的代码。
见附件1:
(5) 在SQL Server 2005中运行代码产生表
图5
图6 3、附件
1、SQL Server 中的生成代码:
2、CDM:BankSystem
3、PDM:BankSystem。