第一篇:北邮数据库期中知识点总结
Chapter 1.Introduction to Database 数据库很重要
数据库的前身是文件系统: 概念 自己管自己 –> 数据孤立 冗余 数据依赖性差(一个改了与它相关的全部重写)文件格式不相容
查询固定 应用程序翻新 数据库的定义
数据库表现了实体(staff)属性(staffno)逻辑关系(外键)DBMS 定义
提供了DDL DML 语句 视图机制 环境五要素 硬件(电脑)
软件(APPDBMS自身)数据
过程(登陆)
人(DA DBA,DB designer,app developer,user)
历史
第一代 SYSTEM R 第二代 关系DBMS 第三代 面向对象的 对象关系的
优缺点
Chapter 2.Database Environment 最常用的DBMS就是ANSI-SPARC结构
目标 结构
外部 用户 【视图】 概念 团体 【表】 内部 文件 【索引】
层与层之间的关系
外部/概念映射 概念/内部映射
Chapter 4.Relational Algebra 根据2.3 data model 我们知道 数据模型分为:
面向对象的 基于关系的:
Relation data model
Network data model Physical data model 物理的
而数据模型的三个组成部分为: ·结构[由一组创建数据库的规则组成](SEE IN CHAPTER 3)
数据模型之关系模型的结构是用表表示的,表的组成,也就是表的结构,如行,列等在第三章讲过。
·操作
这一章主要讲关系模型的操作,该操作是通过关系代数来完成的。
·完整性
SEE IN 3.3 关系模型的完整性:
NULL 没有值得时候用NULL表示 而不是0或空格 Entity integrity 主键不能为空
Reference 如果一个键是外键 不能凭空在这里加东西 Enterprise 自定义约束
关系的操作是闭包的,关系的运算结果还是关系。五大基本关系运算:
·选择selection 相当于WHERE ·投影projection =SELECT ·笛卡儿积cartesian product ·并 union ·集合差 set difference Join连接 intersection 交 division 除 都能用五大基本操作表示 其中 选择和投影是一元操作
·选择:σpredicate(R)= select* from R where predicate=‘’ i.e.σsalary > 10000(Staff)·投影:Πcol1,..., coln(R)= select col1,..., coln from R ΠstaffNo, fName, lName, salary(Staff)= select staffno, fname,lname
From staff ·并 Πcity(Branch)∪ Πcity(PropertyForRent)·减 ·交 ·笛卡尔 ·连接
Theta join(θ-join)R FS = σF(R Χ S)R与S 在F 条件下连接 自然连接 有公共的连接起来
左外连
有公共的+左边的 右外连
有公共+右边 全外连 有公共+全部
半连接 参与θ
连接的左边的属性
·除
第二篇:北邮数据库实验报告
数据库实验报告
(三)姓名:学号:班级:
1.用Transact-SQL语句、数据导入、SQL Server Management Studio(企业管理器)输入的方法对所给定的8张表的数据输入到数据库中。自行决定每张表的数据导入办法,但每种方法各针对二或三张表。
Transact-SQL语句: 导入department,student, student_course表。
insertinto department select*from openrowset
('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:课件数据库database2.xls',department$);
insertinto student select*from openrowset
('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:课件数据库database2.xls',student$);
insertinto student_course select*from openrowset
('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:课件数据库database2.xls',student_course$);
数据导入:
操作:选中数据库studentsdb,右键-任务-导入数据。导入book, class, course表。
SQL Server Management Studio: 操作:右键需要编辑的表,选择编辑前200行。
Teacher:
Teacher_course_class:
导入结果: Book:
Class:
Course:
Department:
Student:
Student_course:
Teacher:
Teacher_course_class:
2.用Transact-SQL向Course表中插入一条记录,course_name为空,看运行的结果。
SQL语句:
INSERTINTO course VALUES('dep02_s002', null,'dep02_s002', '72', '5', '4');运行结果:
分析:course_name有not null的约束,因此这条语句不能执行。
3.用Transact-SQL修改Course表中credit为5的记录,将其credit改为7, credit小于4的改为2,看运行的结果。
SQL语句:
update course set credit=7 where credit=5;执行结果:
分析:约束C1指定了credit的范围为1至6.SQL语句:
update course set credit=2 where credit<4;执行结果:
4.删除一条学生记录,看运行结果,对运行结果进行分析。SQL语句:
deletefrom student where student_id='g9940201';执行结果:
分析:因为有参照完整性约束,不能删除。
5.用Transact-SQL完成将编号为dep04_b001的课程的选修信息插入到一个新的选课信息表中。
SQL语句:
Creattablestudent_course2(course_idchar(20), student_idchar(20)gradeint, creditint, semesterint,school_yearchar(20),primarykey(course_id,student_id));
insertintostudent_course2 select*fromstudent_course wherecourse_id='dep04_b001';执行结果:
6.用Transact-SQL完成删除单片机原理课程的选课信息,分析运行结果。
SQL语句:
deletefrom student_course where course_id in(select course_id from course
where course_name='单片机原理')执行结果: 分析:所有课程号为dep04_s003的课程被删除。
本实验中遇到的问题和解决方法:
本实验的顺利完成需要预先作很多准备工作。以下就是我在遇到缺少组件accessdatabaseengine时的解决过程的记录。
AccessDatabaseEngine的安装
accessdatabaseengine用于和office连接,导入导出数据,本实验中需要导入excel文件。安装配合office的版本,我安装的是accessdatabaseengine2017(English)版本。安装32位版本,因office2016是32位。之前误操作安装了不能使用的老旧版本accessdatabaseengine2007,通过控制面板-应用程序卸载将其卸载了。安装accessdatabaseengine依然报错,是因为microsoftofficeclicktorun阻碍sqlserver的一些功能,需要将其卸载。这是微软推出的用于减少office打开速度的应用程序,安装office2016时会自动安装上,原理是开机时将一部分内容放到内存中,因此打开文件时会更快一些。检测自己的office是通过clickto run 还是MSI安装的,可以在word中点击文件-账户,查看产品信息,如果有下图中“office更新”这个选项,则说明安装过click to run。这个程序在控制面板-应用程序中找不到,因此用删除注册表的方式卸载。快捷键“win+R”输入“regedit”打开注册表编辑器,左边HKEY_CLASSES_ROOT-Installer-Product-00006开头的选项,有四个。单击这几个选项,在右侧查看详细信息,可以看到ProductNam是Microsoft Access database engine 2007(我原来误安装的老版本)。删除之前先备份注册表。方法一:选中要删除的文件,右键-导出,保存。只保存了要删除的文件。方法二:注册表编辑器,文件-导出,保存。保存了注册表所有信息。这是因为如果误删了重要文件会导致严重后果,可能需要重装系统,留此备份是为了可以恢复系统。
备份完之后,选中要删除的文件(00006开头的四个),右键-删除即可。回到Access database engine 32位的程序安装包,安装。我无法安装64位,可能是因为office是32位。安装成功之后就可以在sqlserver中导入excel文件了。
第三篇:北邮数据库实验报告[最终版]
数据库实验报告
(四)姓名:学号:班级:
1.简单查询:
SQL语句:
select credit from course where course_name='SQL Server数据库开发技术';(1)查询“数据库开发技术”课程的学分;
或者模糊查询:
select credit from course where course_name like'%数据库开发技术';执行结果:
(2)查询选修了课程编号为“dep04_s004”的学生的学号和成绩,并将成绩按降序输出;
SQL语句:
select student_id,grade from student_course where course_id='dep04_s003' orderby grade desc;执行结果:
SQL语句:
select course_id,grade from student_course where student_id='g9940205';(3)查询学号为“g9940205”的学生选修的课程编号和成绩;
执行结果:
(4)查询选修了课程编号为“dep04_s001”且成绩高于85分的学生的学号和成绩。
SQL语句:
select student_id,grade from student_course where course_id='dep04_s001'and grade>'85';执行结果:
2.在多表连接的查询实验中,用Transact SQL语句完成以下查询操作:(1)查询选修了课程编号为“dep04_s002”且成绩高于85分的学生的学号、姓名和成绩;
SQL语句:
select student.student_id,student_name,grade from student,student_course where student.student_id=student_course.student_id and student_course.course_id='dep04_s002' and student_course.grade>'85';执行结果:
SQL语句:
select student.student_id,student_name,course_name,grade from student,course,student_course where student.student_id=student_course.student_id and student_course.course_id=course.course_id;(2)查询所有学生的学号、姓名、选修的课程名称和成绩;
执行结果:
(3)查询林红同学选修的课程名称、学分和成绩。(考试成绩>=60 否则无学分。)
SQL语句:
select course_name,student_course.credit,grade from student,student_course,course where student_name='林红'
and student.student_id=student_course.student_id and student_course.course_id=course.course_id;
有学分,3.在复杂查询实验中,用Transact SQL语句完成以下查询操作:
SQL语句:
select student.student_id,student_name from student,student_course where student.student_id=student_course.student_id groupby student.student_id,student_name havingcount(student_course.course_id)>=3;(1)查询至少选修了三门课程的学生的学号和姓名;
执行结果:
SQL语句:
selectavg(grade)from student_course where course_id='dep04_b001';(2)查询选修课程号为“dep04_b001”的学生的平均成绩; 执行结果:
(3)查询所有学生的学号和他选修课程的最高成绩,要求他的选修课程中没有成绩为空的。
SQL语句:
select student_id,max(grade)from student_course whereexists(select grade from student_course)groupby student_id;执行结果:
(4)查询严为老师2001/2002学年教的软件开发技术课程的最高成绩及此学生的学号、姓名、班级。
SQL语句:
select student.student_id,student_name,student.class_id,grade from teacher_course_class,teacher,course,student,student_course where teacher_course_class.teacher_id = teacher.teacher_id and teacher.teacher_name ='严为'and teacher_course_class.course_id = course.course_id and course.course_name ='软件开发技术'and
teacher_course_class.course_id = student_course.course_id and student_course.student_id = student.student_id and teacher_course_class.school_year ='2001/2002'and student_course.grade>=all(select grade from student_course,course where student_course.course_id = course.course_id and
course.course_name ='软件开发技术');执行结果:
(5)查询数据库开发技术课程用过的教材名称,作者和出版社。
SQL语句:
select book_name,author,publish_company from book,course where course.book_id=book.book_id and course_name='SQL SERVER数据库开发技术';执行结果:
(6)查询计算机科学系讲授过数据库开发技术的老师姓名和职称。
SQL语句:
select teacher_name,profession from teacher,course,teacher_course_class,department where teacher.teacher_id = teacher_course_class.teacher_id and course.course_id = teacher_course_class.course_id and department.department_id = teacher.department_id and department.department_name ='计算机科学'and
course.course_name ='SQL Server数据库开发技术';执行结果:
4.在嵌套查询实验中,用Transact SQL语句完成以下查询操作,要求写嵌套查询语句:
SQL语句:
select student_id,student_name from student where student_id in(select student_id from student_course where course_id in(select course_id from course where course_name ='软件开发技术'));(1)查询选修了软件开发技术的学生的学号和姓名;
执行结果:
SQL语句:
select student_id,student_name from student wherenotexists(select student_id from student_course(2)查询没有选修软件开发技术的学生的学号和姓名; where course_id in(select course_id from course where course_name ='软件开发技术'));执行结果:
(3)查询至少选修了学号为“g9940201”的学生所选修的所有课程的学生的学号和姓名。
SQL语句:
select student_id,student_name from student wherenotexists(select*
from student_course student_course1 where student_course1.student_id ='g9940201' andnotexists(select*
from student_course student_course2 where student.student_id=student_course2.student_id and student_course2.course_id = student_course1.course_id));执行结果:
5.建立如下视图:
学生选修课程信息视图,包括以下内容:
对(1)(2)内容用企业管理器和SQL语句方式分别完成。1)学生学号、姓名、所在系、授课老师姓名、课程名称、课程教材名称、出版社、学分、选课成绩
SQL语句:
Createview
view1(student_id,student_name,department_name,teacher_name,course_name, book_name,publish_name,credit,grade)asselectdistinct
student.student_id,student.student_name,department_name,teacher_name,course_name,book_name,publish_company,student_course.credit,student_course.grade from
student,course,department,student_course,teacher,teacher_course_class,book,class where
student.student_id=student_course.student_id and student.class_id=class.class_id and class.department_id=department.department_id and student_course.course_id=course.course_id and course.book_id=book.book_id and teacher.teacher_id=teacher_course_class.teacher_id and teacher_course_class.course_id=course.course_id
企业管理器:
Step1:右键视图,选择新建视图。
Step2:添加涉及到的表。
Step3:选择需要显示的列。
Step4:右键视图view1,选择查看前1000行。
执行结果:
SQL语句:
alterview
view1(student_id,student_name,department_name,teacher_name,course_name,book_name,publish_name,credit,grade,class_id)ASSELECT DISTINCT
student.student_id,student_name,department_name,teacher_name,course_name,book_name,publish_company,student_course.credit,student_course.grade,student.class_id FROM
student,student_course,course,teacher,teacher_course_class,book,department,class WHERE student.student_id=student_course.student_id and student.class_id=class.class_id and class.department_id=department.department_id and student_course.course_id=course.course_id and course.book_id=book.book_id and teacher.teacher_id=teacher_course_class.teacher_id and teacher_course_class.course_id=course.course_id 2)修改以上视图,增加学生所在班级信息。
企业管理器:
勾选class表中的“所有列”。
执行结果:
SQL语句:
select student_id,grade from view1 where course_name ='计算机基础';3)对以上视图进行相关的查询操作:(1)查询选修了计算机基础的学生的学号和成绩;
执行结果:
SQL语句:
select student_id,student_name,course_name,grade from view1(2)查询所有学生的学号、姓名、选修的课程名称和成绩;
执行结果:
SQL语句:
select student_id,student_name,course_name from view1 where teacher_name ='章红';(3)查询选修了章红老师课程的学生的学号和姓名、课程名称。
执行结果:
第四篇:北邮数据库第一次实验报告
《数据库原理》实验报告
实验名称班
级组
号组员姓名 数据库实验平台的安装、数据库创建与维护实验
计算机科学与技术8班2011211308
梁展伟、李安
一、实验目的
1.通过对Microsoft SQL Server数据库的安装和简单使用:
(1)了解安装Microsoft SQL Server数据库的软硬件环境和安装方法;(2)熟悉Microsoft SQL Server数据库相关使用;(3)熟悉Microsoft SQL Server数据库的构成和相关工具;
(4)通过Microsoft SQL Server数据库的使用来理解数据库系统的基本概念。
2.通过创建数据库、并进行相应的维护,了解并掌握Microsoft SQL Server数据库数据库的创建和维护的不同方法和途径,并通过这一具体的数据库理解实际数据库所包含的各要素。
二、实验环境
Windows7下的Microsoft SQL Server 2012 standard edition。
三、实验内容与步骤
一、Microsoft SQL Server数据库安装
1.下载相应版本。选择实验室Windows XP或者Win7系统或者虚拟机(vmware)上自行安装的操作系统或者是自己的机器之一安装该版本的Microsoft SQL Server。可选版本有Microsoft SQL Server 2005/2008或者2012的Express,Develop或者Enterprise等各版本。安装时通常可同时安装SQL Server Management Studio Express,以后建立数据库等很方便。
2.练习启动和停止数据库服务。
打开控制面板|管理工具|服务,找出与所使用数据库相关的服务,尝试停止和启动它们。再使用SQL Server Configuration Manager下的SQL Server Services选项进行相关操作。最后保持这些服务为启动状态。如果这些服务没有启动,非常可能导致数据库系统无法工作,从而后续实验无法进行。
二、熟悉Microsoft SQL Server数据库基本用户界面:
1. 请运行SQL Server Management Studio Express。熟悉数据库管理系统的基本用户界面。
三、使用Microsoft SQL Server创建数据库: 1.Microsfot SQL Server数据库创建(1)了解数据库系统的命令行操作界面:
编写包含CREATE DATABASE命令的脚本文件,SQL Server Management Studio Express下打开该文件并执行之。
如下图,新创建的数据库lian出现在数据库目录中:
(2)SQL Server Management Studio Express下使用向导创建数据库。并将创建数据库脚本保存到文件中。打开文件查看相应命令。理解用户界面上相关参数。后续实验也同样的学习脚本和理解参数的要求。
连接参数的意义就是与其他的数据库进行连接;查询即使用数据库查询语言对已选择数据库进行查询
(3)找出系统数据库,查看其下的表及其它数据库对象。
四、Microsoft SQL Server数据库维护
(1)对数据库属性和参数进行查询、相应的修改和维护,内容包括:
a)调整数据库的大小,完成数据库大小的增加、减小;
b)增加文件组;
c)修改日志文件的最大值;
d)查看数据库的属性值。
(2)数据库的删除
a)使用脚本文件删除数据库。
命令 drop database 如图,先前的数据库lian已被删除:
b)使用SQL Server Management Studio Express删除数据库
直接右击该数据库,选择删除命令。
四、实验要求
1. Microsoft SQL Server数据库的安装实验要求学生在微机上安装Microsoft SQL Server数据库数据库系统,为后续各个实验搭建实验环境。
2. 数据库创建与维护实验以GSM网络配置数据库为背景,要求面向具体应用领域,利用Microsoft SQL Server数据库相关机制,创建并维护数据库系统,为后续各个实验提供前期准备。
3. 要求学生根据以上要求确定实验步骤,独立完成以上实验内容。并在安装和数据库运行后熟悉Microsoft SQL Server数据库的各种运行管理。
4.对实验结果进行总结和分析;给出完成以上实验内容的Transact_SQL语句,并对相应的SQL语句进行分析;说明建立的数据库的相关内容,和维护后的相关属性的改变。
使用了create database 和 drop database这两个语句,前者用来建立一个新的数据库,包括其名称、位置、以及日志文件的相关属性定义;后者用来删除之前建立好的数据库,直接在其后面加上数据库名称即可。
通过修改维护相关属性的操作之后,数据库会做相应的变化,例如添加属性、修改大小等等。
5. 实验完成后完成实验报告。
五、实验总结
在实验中有哪些重要问题或者事件?你如何处理的?你的收获是什么?有何建议和意见等等。
1、安装时没有出现任何问题,就是在一些插件的选择以及用户的添加上略微繁琐,在使用SQL server配置管理器时,其中有一个服务无法直接手动打开,在网上查阅资料后使用高级选项中的操作才将其打开;
2、在使用脚本文件创建数据库时,确认好编写的代码无误后编译还是会出错,仔细检查之后发现是冒号的打成了中文的,改正后运行无误;
首先,学习数据库还是要多查阅资料,因为有大量的软件操作,所以熟悉软件至关重要,其次,在做一些编码的任务时,一定要细心,切不可再因为疏忽大意导致时间白白浪费。
第五篇:【数据库知识点总结】
数据库概念总结
第一章 绪论
1、数据:描述事物的符号记录称为数据。可以是数字也可以是文字、图形、图像声音、语言等。
2、数据库:是长期储存在计算机内、有组织的、可共享的大量数据的集合。具有永久存储、有组织和可共享三个基本特点。
3、数据库管理系统:位于用户与操作系统之间的一层数据管理软件。用于科学地组织和存储数据,高效地获取和维护数据。
4、数据库管理系统主要功能:数据定义功能、数据组织存储和管理、数据操纵功能、数据库的事务管理和运行管理、数据库的建立和维护功能、其他。
5、数据库系统:是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
特点:数据结构化(与文件系统的本质区别)、数据的共享性高,冗余度低,易扩充、数据独立性高(通过三级模式和二级映像功能来保证)、数据由DBMS统一管理和控制
6、DBMS须提供以下几方面的数据控制功能:数据的安全性保护、数据的完整性检查、并发控制、数据库恢复。
7、数据管理技术的发展过程:人工管理阶段、文件系统阶段、数据库系统阶段
8、数据库的体系结构为三级结构,它们是存储层、概念层和外部层。
9、在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。通俗地讲,数据模型就是现实世界的模拟。
两类数据模型:概念模型、逻辑模型和物理模型。
10、数据模型的组成要素:数据结构、数据操作、数据的完整性约束条件。
11、模式:是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
外模式/模式映像:保证了数据的逻辑独立性 模式/ 内模式映像:保证了数据的物理独立性。
12、什么是数据库的逻辑独立性?物理独立性?为什么数据库系统具有数据与程序的独立性?
逻辑独立性是指用户的用程序与数据库的逻辑结构是相互独立的,使得当数据的逻辑结构变了,用户程序可以不变。物理独立性是指用户的应用程序与存储在磁盘上的数据是相互独立的,使得当数据的物理结构改变了,应用程序也可以不变。数据库系统的三级模式是对数据的三个抽象级别,将数据的具体组织留给DBMS 管理,使用户能逻辑地组织数据,而不必关心数据在计算机上的具体表示方式和存储方式。为了能够在内部实现三个抽象层次的联系和转换,数据库系统在三级模式之间提供了两级映像:外模式/模式映像、模式/ 内模式映,保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
13、数据库系统的组成:硬件平台及数据库,软件,人员
人员:数据库管理员,系统分析员和数据库设计人员,应用程序员,最终用户
数据库管理员:决定数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据的安全性要求和完整性约束条件,监控数据库的使用和运行,数据库的改进和重组重构
第二章 关系数据库
1、关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系。
2、选择、投影、并、差、笛卡尔积是5 种基本操作。
3、专门的关系运算包括选择、投影、连接、除运算等。
第三章 SQL
1、SQL 特点:综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供多种使用方式、语言简洁,易学易用。
2、聚集函数:COUNT([DISTINCT|ALL]*)COUNT([DISTINCT|ALL]<列名>)SUM([DISTINCT|ALL]<列名>)AVG([DISTINCT|ALL]<列名>)MAX([DISTINCT|ALL]<列名>)MIN([DISTINCT|ALL]<列名>)
3、视图的作用:
1、能够简化用户的操作
2、使用户能以多种角度看待同一数据
3、对重构数据库提供了一定程度的逻辑独立性
4、能够对机密数据提供安全保护
5、适当的利用视图可以更清晰的表达查询
4、WHERE 子句与HAVING 短语的区别在于作用对象不同。前者作用于基本表或视图,从中选择满足条件的元组。后者作用于组,从中选择满足条件的组。
5、=ANY 等价于IN 谓词, 第四章 数据库安全性 1、数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露,更改或破坏。 2、计算机系统的三类安全性问题:技术安全、管理安全、政策法律。 3、常用的安全技术有:1.用户识别和鉴别2.存取控制机制3.自主存取控制4.强制存取控制(MAC)5.视图机制。6.审计(Audit)功能7.数据加密 4、视图的好处:简化用户操作、使用户能以多种角度看待同一数据、对重构数据库提供了一定程度的逻辑独立性、对机密数据提供安全保护、适当利用可以更清晰的表达查询。 5、实现数据库系统安全性的技术和方法 — 最重要的是存取控制技术、视图技术和审计技术 第五章 数据库完整性 1、数据库完整性是指数据的正确性和相容性。 2、数据的完整为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。安全性是保护数据库防止恶意的破坏和非法的存取。因此数据完整性防范的是合法用户的无意操作导致的数据错误,数据安全性防范的是非法用户的恶意操作导致的数据错误。 3、实体完整性:若属性(指一个或一组属性)A 是基本关系R 的主属性,则A 不能取空值。 4、参照完整性:若属性(或属性组)F 是基本关系R 的外码,它与基本关系S 的主码K 相对应(基本关系R 和S 不一定是不同的关系),则对于R 中每个元组在F 上的值必须为: 或者取空值(F 的每个属性值均为空值); 或者等于S 中某个元组的主码值。 5、触发器是用户定义在关系表上的一类由事件驱动的特殊过程。 6、在参照完整性中,为什么外码的属性值也可以为空?什么时候可以为空? 若F 是基本关系R 的外码,它与基本关系S 的主码K,相对应(基本关系R 和S 不一定是不同的关系)则对于R 中每个元组在F 上的值可以取空值,或者等于S 中某个元组的主码值。即,如果F 本身不是一个主属性,则能取空值,否则不能取空值。 第六章 关系数据理论 1、数据依赖是一个关系内部属性与属性之间的一种约束关系。 2、函数依赖:设R(U)是属性集U上的关系模式。X,Y 是U 的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X 上的属性值相等,而在Y 上的属性值不等,则称X 函数确定Y 或Y 函数依赖于X,记作X →Y。 3、多值依赖:设R(U)是属性集U 上的一个关系模式。X,Y,Z 是U 的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y 的值,这组值仅仅决定于x 值而与z 值无关。4、1NF:每一个分量必须是不可分的数据项。2NF:R ∈1NF,且每一个非主属性完全依赖于码 3NF:关系模式R中若不存在这样的码X,属性组Y 及非主属性 Z(ZY)使得XY,YZ 成立,YX,则称R3NF。 BCNF:关系模式R ∈1NF。XY 且YX 时X 必含有码,则称RBCNF。4NF :关系模式 R ∈1NF,如果对于R 的每个非多值依赖X Y(YX),X 都含有码,则称R4NF。 5、规范化小结:1NF—2NF 消除非主属性对码的部分函数依赖 ——3NF 消除非主属性对码的传递函数依赖—BCNF消除主属性对码的部分和传递函数依赖—4NF 消除非平凡且非函数依赖的多值依赖。 第七章 数据库设计 1、数据库设计定义:对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统使之能够有效地存储和管理数据,满足各种用户应用需求,包括信息管理要求和数据操作要求。 2、特点:三分技术,七分管理,十二分基础数据。结构(数据)设计和行为(处理)设计相结合。 3、基本步骤:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。 4、需求分析阶段任务:信息要求、处理要求、安全性与完整性要求。 5、需求分析阶段:综合各个用户的应用需求 概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图)逻辑设计阶段:将E-R图转换成具体的数据库产品支持的数据模型,形成数据库逻辑模式;再建立必要的视图,形成数据的外模式 物理设计阶段:进行物理存储安排,建立索引,形成数据库内模式 6、数据字典:系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。通常包括数据项、数据流、数据存储和处理 5 部分。数据字典是关于数据库中数据的描述,即元数据,而不是数据本身。 7、概念结构设计方法:自顶向下、自底向上、逐步扩张、混合策略。 8、确定数据库物理结构:确定数据的存放位置和存储结构,包括:确定关系、索引、聚簇、日志、备份等的存储安排和存储结构。确定系统配置。 第八章 数据库编程 1、游标是系统为用户开设的一个数据缓冲区,存放SQL 语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。 2、嵌入式SQL语句与主语言之间的通信:向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区(SQLCA)实现。主语言向SQL语句提供参数,主要用主变量实现。将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现。 3、存储过程是由PL/SQL 语句书写的过程,这个经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。优点:运行效率高、降低了客户机和服务器之间的通信量、有利于集中控制,方便维护。 4、ODBC的工作流程:配置数据源,初始化环境,建立连接,分配语句句柄,执行SQL语句,结果集处理,中止 第九章 关系查询处理和查询优化 1、查询处理步骤:查询分析 对查询语句进行扫描、词法分析和语法分析。 查询检查 根据数据字典对合法的查询语句进行语义检查根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查 查询优化 选择一个高效执行的查询处理策略 查询执行 依据优化器得到的执行策略生成查询计划,由代码生成器生成执行这个查询计 划的代码。 2、连接操作的实现 嵌套循环方法 排序-合并方法 索引连接方法 Hash Join方法 3、查询优化的总目标 是选择有效的策略,求得给定关系表达式的值,使得查询代价最小(实际上是较小)。 第十章 数据库恢复技术 1、事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。特性:原子性、一致性、隔离性、持续性。 2、故障种类:事务内部故障、系统故障、介质故障、计算机病毒 3、数据转储是数据库恢复中采用的基本技术即DBA 定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。 4、日志文件是用来记录事务对数据库的更新操作的文件。主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。 5、数据库镜像即根据DBA 的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。 第十一章 并发控制 1、并发控制机制的任务:对并发操作进行正确调度,保证事务的隔离性,保证数据库的一致性 2、并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据等。 3、封锁就是事务T 在对某个数据对象操作之前,先向系统发出请求,对其加锁。基本的封锁类型在两种:排它锁(X 锁,写锁)和共享锁(S 锁,读锁)。 4、预防死锁的方法:一次封锁法,顺序封锁法 死锁的诊断与解除 超时法 等待图法 5、可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化的调度。 6、两段锁协议是指事务必须分两个阶段对数据项加锁和解锁。在对任何数据进行读、写操作之前,首先要申请该数据的封锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁.7、封锁对象的大小称为封锁粒度。 8、选择封锁粒度的原则:需要处理多个关系的大量元组的用户事务:以数据库为封锁单位; 需要处理大量元组的用户事务:以关系为封锁单元; 只处理少量元组的用户事务:以元组为封锁单位