第一篇:数据库课题设计总结
数据库课题设计心得
——计科系03本(3):黄胡康
经过近2个月的时间,总算是做好了成绩管理系统,自从确定了课题设计的题目后——学生成绩管理系统,便开始了准备工作。从刚开始写成绩管理的需求分析、画数据流图、概要设计说明书以及数据库字典。在把这些准备工作都做好了后,便开始了设计页面与编程。说实话,刚开始觉得什么都不会写,尤其是VB,因为VB已经学了一年多了,再说学VB那个时候又没怎么学懂,基本的格式代码都已经忘的差不多了。还得重新学VB
在整个设计过程中,通过各种渠道获取资料。利用周末去大的书店查资料,把重要的东西记录下来,也去图书馆借了一些相关的参考资料,同时还充分利用网上资源查一些资料。最后再综合这些资料,结合VB、Access与SQL进行具体的操作。也可以说这是我第一次从开始设计到编程到最后完成自己独立完成。在这过程中也遇到了很多难题,比如说,按学生的学号或名称来查询学生的成绩时,就遇到了很多困难,先是怎样把几个表连接起来,再怎样用DataGrid把一个学生的多条记录显示出来,怎样求平均成绩等等。通过查资料,仔细思考,把这些问题都解决了。但是,最后调试程序时,又发现程序缺少参照完整性,又重新回过去重写代码,可是写了很久就是不能正常的运行,至少考虑了几个小时,最后才发现代码缺少了一部分条件,添加上后就可以正常运行了。第一次感受到了郁闷了半天后的喜悦心情。
从做课题设计的过程中,我的体会挺多的。只要有信心与耐心,没有做不到的事情。因为在这个过程中写代码与调试的过程中确实需要耐心与信心,否则就不可能写完整。我也知道该课题还存在很多的漏洞,也不是很完整。比如还应该添加上系科管理,班级管理等。由于时间的原因,也不能使之更完整。如果确实要给自己一个分数,我也不能给自己一个确切的多少分,但是我已经尽我的努力写的了,同时我自己也在这个过程中也学到了很多知识。其实这已经使我很满足了。分数也不能代表什么,我认为自己真正的学到了东西才是最重要的。
第二篇:数据库设计知识点总结
数据库设计 概念
1.1 描述
数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据。
1.2 数据库设计包含四部分
<1>需求分析 <2>概念结构设计 <3>逻辑结构设计 <4>物理结构设计
1.3 数据库设计的原则
<1>明白自己的系统为OLTP系统还是OLAP系统 <2>降低对数据库功能的依赖 <3>严格遵从数据库三范式 <4>适当的考虑数据分块
<5>尽量保证记录的唯一标识存在 概念结构设计
2.1 E--R图设计
E--R图分为局部E--R图和全局E--R图 E--R模型基本符号 实体的表示:长方形
联系的表示:菱形,如1:
1、1:n(m:1)、(m:n)属性的表示:椭圆形
2.2 确定实体与属性的原则:
<1>能作为属性的尽量作为属性而不要划为实体
<2>作为属性的数据元素与实体之间的联系只能是1:n的联系 <3>作为属性的数据项不能再用其他属性加以描述,也不能与其他实体或属性发生联系。逻辑结构设计
3.1 概念
是将基本E--R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构的过程。
3.2 逻辑结构设计的过程分为
<1>将概念结构转换为现有DBMS支持的关系、网状或层次模型中的某一种数据模型 <2>从功能和性能要求上对转换的模型进行评价,看它是否满足用户要求 <3>对数据模型进行优化
3.3 逻辑结构设计的原则
<1>一个实体型转换为一个关系模型,实体的属性就是关系的属性,实体的键就是关系的键; <2>一个联系转换为一个关系模式,与该联系相连的每个实体型的键以及联系的属性都转换为关系的属性。配置数据库连接
4.1 步骤
1.打开powerdesigner,依次点击:database--connect 2.点击connect,打开对话窗口: 3.然后点击Configuer按钮,弹出数据源配置Configuer Data Connections对话框:
4.把页签切换到第三个Connetion Profiles页签中,如果连接存在,选中就行,如果不存在,点击add Data Source数据库图标进行新增,弹出Connection Profile Definition对话框 此对话框中需要输入以下信息
Connection profile name: 输入数据库连接文件名,它会自动加上后缀名.dcp;
Directory:数据库连接文件存放路径;可以任意;
Connetction type: 选择JDBC;
DBMS type : 数据库类型选择Oracle;
Server name: 服务器名称;也相当于对应PL/SQL登陆页面的数据库;
Database name: 数据库名字;
User name: 登陆数据库名字;
Password: 密码
JDBC Driver class: 驱动类;只要下拉框选择就行;
JDBC Driver Jar URL: 访问的服务器路径
JDBC connection files: 驱动包;需要指向ojdbc14.jar或者其他驱动的包的按钮路径;
5.点击Test Connection 按钮进行连接测试;
测试连接是否成功;成功会弹出成功或者失败消息框,测试成功后。点击确定按钮,返回数据源配置Configuer Data Connections对话框,列表中就会多出一个.dcp文件,点击确定即可。导出数据库
5.1 步骤
导出数据库表方法如下:
1.启动PowerDesigner
2.菜单:File->Reverse Engineer->Database 出来New Physical Data Model对话框,DBMS选择ORACLE Version 10g 选项,其他可以选择默认值,点击“确定”按钮,弹出Database Reverse Engineering Options对话框:
3.然后在下拉框中选择我们之前建立的数据源文件,并再次输入数据库User ID和password,点击Connection即可连接至数据库,并得取所有的数据库对象,在此我们选择所有的Table。
PowerDesigner 6.1 描述
Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型,还可以为数据仓库制作结构模型,也能对团队设计模型进行控制。他可以与许多流行的数据库设计软件,例如PowerBuilder,Delphi,VB等相配合使缩短开发时间和使系统设计更优化。
power designer是能进行数据库设计的强大的软件,是一款开发人员常用的数据库建模工具。使用它可以分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical Data Model)两个层次对数据库进行设计。在这里,概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定义;物理数据模型是在概念数据模型的基础上针对目标数据库管理系统的具体化。导入数据库
7.1 方法
将视图切换到physical模型下,连接数据库:单击databasedatabase connection,弹出下面窗口,进行数据库的连接。
链接完成后单击toolsforward engineerschema generate,将弹出下面的窗口,单击generate,即可将物理模型导入数据库。实体
8.1 实体间的关系
实体间的三种关系:
1.标识关系(identifying relationship);
2.多对多关系(many-to-many relationship);
3.非标识关系(non-identifying relationship)。
标识关系是指把实体1中的主键作为实体2中的外键,且作为实体2的主键,非标识关系是指把实体1中的主键作为实体2中的外键,但不作为实体2的主键,8.2 概念
Erwin中的实体有两种:独立实体和依赖实体。实体被指定作为独立实体,或依赖实体,取决于其键的获得方式。独立实体由方角盒来指定,独立实体不依赖于模型中任何其它实体来标识;依赖实体被指定为圆角盒,依赖实体依存于模型中的其它实体,修改实体名
8.3 修改实体名称
方法一:单击实体名,按F2键可 以对实体名称进行修改;
方法二:右键单击欲进行修改的实体,选择Entity Properties;
8.4 方法三:双击实体修改。列的增删
方法一:右键单击所选实体Ñ≡馎tiue,在弹出的trbts窗口中添加É境蛐薷氖粜裕?方法二:单击所选实体,按tb键也可以进行添加,删除或修改操作。
第三篇:优化MySchool数据库设计总结
优化MySchool数据库设计总结
第一章 :数据库设计
1,什么是数据库设计
数据库设计就是将数据库中的数据实体以及这些数据实体之间的光系,进行规划和结构化的过程。
2.数据库的设计步骤
(1)收集信息
(2)标识实体
(3)标识每个实体需要存储的详细信息
(4)标识实体之间的关系 3.绘制E-R图
实体,属性,联系,映射基数: 一对一 一对多 多对一 多对多
实体关系图 矩形表示实体集
椭圆形表示属性
菱形表示联系集
直线用来连接属性和实体集,也用来连接实体集和联系集
4.绘制数据库模型图
(1),使用pdm工具新建一个数据库模型图
(2),添加实体
(3),添加数据列及相应的属性
(4),添加实体之间的映射关系
5.规范数据库设计三大范式:(1),第一范式
(确保每列的原子性,都是不可再分的最小数据单元)
(2),第二范式
(确保表中的每列都和主键相关,并且除了主键以外其他列都依赖该主键)
(3),第三范式
(确保每列都和主键直接相关,而不是间接相关)
第二章:数据库的实现
1:
使用SQL语句创建和删除数据库
If exists(select * from sysodatabases where name=’ 数据库名’)Drop database数据库名
Create database 数据库名
On primary
(name =’
’
Filename=’
’ Size= Maxsize= Filegrowth=)Log on(name=’
’ Filename=’
‘ Size= Filegrowth=)Go 1.2 :删除数据库
Drop database 数据库名
2:
使用SQL语句创建和删除表
If exists(select * from sysobjects where name=’表名’)表名
Create table 表名
(列名 属性 非空 主键 自动增长)Go 2.2删除表 Drop table 表名
3:
使用SQL语句创建和删除约束
All table 表名
Add constraint 约束名 约束类型 具体的约束说明 1,主键约束(primary key 列名)2,非空约束(not null)3,唯一约束(unique 列名)4,检查约束(check 列名)5,默认约束(default 列名)6,外键约束(foreign key 列名)
3.2:删除约束
Alter table 表名 rop constraint 约束名
第三章:SQL编程
1.变量
1.1 局部变量声明
Declare 变量名(前面加一@符号)类型 Set.赋值变量指定的数据常量 Select.赋值一般从表中查询数据 1.2 全局变量系统自带
2.输出语句
print :输出局部变量和字符串,必须是字符串类型。
Select:一般使用在查询输出。3.数据类型转换
Cast(表达式 as 数据类型)Convert(数据类型[(长度)],表达式[,样式])Cast()和convert()函数都可以将某种数据类型的表达式显示的转换为另一种数据类型,但是convert()函数可以通过第三个参数指定转化后的字符样式。不同的样式显示格式不同。4.逻辑控制语句
1,Begin –end 相当我们C#语言的大括号 2.if-else条件语句根据条件是否成立来确定程序的执行方向,需要与begin-end结合使用。
3.while.循环语句更具条件重复执行,一般在事情要多次执行的时候使用,break跳出循环,contiune跳过contiune后面语句,回到while第一条语句,准备下次循环。
语法: While(条件)Begin 语句块 [break,continue] End 4.case多分支语句与C#开关结构类似 语法: Case When 条件1 then 结果1 When 条件2 then 结果 2 Else 其他结果 End 第四章 :高级查询
1.子查询
表连接查询可以代替所有的子查询,但是子查询不可以代替所有的表查询。2.in和not in子查询
使用in关键字可以使主查询匹配子查询返回多个单列值
使用not in查询取in查询相反的结果 3.exists 和not exists子查询
Exists关键字是检测子查询语句,如果子查询结果非空返回真,否则返回假。
使用Not exists 查询取exists查询相反结果。
第六章:事务,视图和索引 1.事务
事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据要么都执行要么都不执行。
事务四大属性 1.原子性
(事务是一个完整的操作,事务的个元素是不可在分的)
2.一致性
(当事务完成时,数据必须处于一致状态。)3.隔离性
(对数据进行操作时所有的并发事务是彼此隔离的)4.持久性
(事务成功完成后,它对于数据库的改变是永久性的。)执行事务语法
Begin transaction(标记事务起始点)Commit transaction(提交事物)Rall back transaction(回滚事务)2.视图
视图是另一种查看数据库一个表和多个表的方法,它是一种虚拟表,可以保证数据库的安全性,结果更容易理解,获得数据更容易,限制数据检索更容易,维护应用程序更方便。
创建视图
Create view 视图名称 As(select 语句)删除视图
Drop view 视图名 查看视图
Select 所需数据 from 视图名称 3.索引 3.1索引类型 1,唯一索引 2.主键索引 3.聚集索引 4.非聚集索引 5.复合索引 6.全文索引 3.2创建索引
Create [索引类型] index 索引名称 On 表名(列名)[with fillfactor=x] 3.2 使用索引查询数据 Select * from 表名 With(index =索引名称)
3.3删除索引
Drop index 表名.索引名称 3.4 查看索引
3.4.1 用系统存储过程sp-helpindex查看 Exec sp-helpindex 表名 3.4.2用视图sys_indexes Select * from sys_indexes 第七章 :存储过程
1.存储过程的概念
存储过程是数据库管理系统中保存。预先编译的并能实现某种功能的sql程序。他是数据库中运用比较广泛的一种数据对象,存储过程可加快查询速度,提高访问数据速度,实现模块化编程,保持一致性和提高安全性。
2.用户定义存储过程
1.不带参数存储过程语法 Create procedure 存储过程名称 As Sql语句 go 1.带参数存储过程语法
Create procedure 存储过程名称 @参数1 数据类型
@参数2 数据类型 output(output关键字代表输出参数)As Sql语句 go
处理错误信息
用raiserror语句用来向用户报告错误
第四篇:数据库总结
数据库总结:共三天的课程
数据库的概念:数据库是一组有序的数据的集合; 数据库的作用:为了有效的管理数据; 数据类型:
一 字符串相关的类型:一般用于人名、大于2147483647(10位数)的数字、地址等字符信息
使用格式:字段名 char(存放字符的长度)
或者
字段名
varchar(存放字符的长度)Char:代表的是定长的字符串类型,定义了多长,就分配多长的存储空间,只要不超过定义的长度,分配给char的空间长度就不会改变,余下的部分用空格代替;
Varchar:代表的是可变长度的字符串类型,定义的长度可以理解为是虚拟的空间,只要字符串的长度不超过定义的长度,那么varchar的分配空间长度就是字符串实际的长度,余下的部分自动消失; 二 数字相关的类型:一般用于工资、人数统计等方面; 使用格式:字段名
int/float/double 【此处不用定义字段的长度】 int :取值的范围-2147483648~2147483647,后面可以设置主键及自增长;
float/double:用于带有小数的数据定义 decimal:多用于金钱的数据 三 时间相关的数据类型:一般用于时间的统计,例如登录时间、修改时间、退出时间等;
使用格式:字段名
date/time/datetime/timestamp 【此处不用定义字段的长度】,插入表的时候格式与字符串的插入格式一样,都是用单引号插入
date:日期类型
格式:yyyy-MM-dd time:时间类型
格式:hh:mm:ss Datetime:日期时间
格式:yyyy-MM-dd hh:mm:ss Timestamp:时间戳
格式:yyyy-MM-dd hh:mm:ss 数据库的操作:
一 查看所有数据库:select databases;二 查看所有表:select tables;三 创建数据库:create database 数据库名称;
use 数据库名称;
四 创建表:create table 表名(字段1
类型(长度)[约束], 字段2
类型(长度)[约束], 字段n
类型(长度)[约束])注:字段n的结尾处不需要用逗号分隔
五 删除当前表/数据库:drop table 表名/ 数据库名;
六 向表中插入数据:insert into 表名(字段1,字段2,字段n)values(值1,值2,值n),(值1,值2,值n),(值1,值2,值n),(值1,值2,值n)...注:此处的插入数据可以用逗号隔开,想要插入几条数据就插入几个值。
七 查看当前表的值:select * from 表名
注:*是通配符,代表全部的意思,此处*还可以用表中的字段名代替,那么查看就是相应的字段名下的数据。
约束:
一 主键约束:primary key 代表的是唯
一、不重复,非空的约束 使用格式: 字段名
类型(长度)primary key 自增长:auto_increment 必须与主键约束一同使用,字段的类型是整型,插入数据的时候可以不用向设置自增长的字段添加数据,起始的默认数字是:1 二 唯一约束:unique 不可以重复,唯一 使用格式: 字段名
类型(长度)unique 注:空格是不可以作为字符串使用的,空格相当于null,如果向设置unique的字段内插入数据是存在【‘空格’、null、(‘’)】当中两个或两个以上的时候就会报错【’null’是字符串,不是空】 三 非空约束:not null 插入数据时必须要为设置not null的字段插入数据,这个字段不能为空
使用格式: 字段名
类型(长度)not null 注:空格是不可以作为字符串使用的,空格相当于null,如果向设置not null的字段内插入数据是存在【‘空格’、null、(‘’)】当中一个或一个以上的时候就会报错
四 默认约束:default 为字段设置默认值,当不为设置默认约束的字段插入数据是,系统自动将默认值赋予这个字段 使用格式: 字段名
类型(长度)default 值 五 检查约束:check(检查的内容)使用格式: 字段名
类型(长度)check(检查的内容)注:在SQL语句中没有实际的含义,但是需要会用
六 外键约束:foreign key 必须是另一个表的主键(唯一的),设置了外键的字段,受到关联表中相应主键的字段的约束,当要为外键约束插入数据的时候,必须先为被关联的表插入相应主键的数据;
使用格式: 创建表时候就设置外键约束
字段名
类型(长度),Foreign key(字段名)references 表名(对应主键的字段名)表已经创建完,插入外键约束
Alter table 表名 add constraint fk_f foreign key(要设置外键的字段名)references 被关联的表名(被关联的字段名);表的结构:
查看表结构:desc/describe 表名;修改表名:alter table 表名 rename 新表名 添加新字段:alter table 表名 add 字段名 类型(长度)修改字段:alter table 表名 change 旧字段 新字段 新字段类型(长度)删除字段:alter table 表名 drop 字段名
记录的操作:
一 插入记录:insert into 表名(字段名1,字段名n)values(值1,值n)二 修改记录:update 表名 set 字段名=值 where 条件
注:这里如果不加where条件,那么这个表的这个字段名下的数据全部赋值成为“值”
三 删除记录:delete from表名 where 条件
注:此处删除的是表中的符合where条件的整条记录 注意:使用delete和update的时候要千万注意,必须要写where条件语句,要不然就会将当前表中的所有数据改变,在想改回来的话会非常非常费劲!!!
四 查询记录:select 字段名1,字段名n from 表名 where 查询条件 查询去掉重复的值:关键字 distinct 格式:select distinct 字段名1,字段名n from 表名命别名/赋值表: 关键字 as 命别名:select 字段名 as ‘自定义名’
from 表名 赋值表:create table 新表名 as select * from 旧表名 3 查询条件语句的范围:in(等值判断)/not in select 字段名1,字段名n from 表名 where 字段名
in/not in(值1,值n)4 模糊查询:like
匹配标识符:’_’代表一个字符、%代表多个字符
Select 字段名 from 表名 where 字段名 like ‘_sth%’ 注:like后面的判断值如果是数字的话要加单引号,例如想要查询的条件是12345,可以这样写:’%3%’,单引号必须加 5 区间查询:limit m,n
查询从第m个记录开始,一共n条记录,这里的m指的是类似Java数组里的下标,计数从0开始
Limit m
查询从头开始的一共m条记录
Select */字段名 from 表名 limit m,n 6 查询值是否存在某段区间内:between 最大值 and 最小值(int 型的最大值、最小值)Select 字段名1,字段名n from 表名
where 字段名 between 最大值
and 最小值:
注意这里面的条件含有等于最大值和等于最小值
字段名 between 最大值 and 最小值= 字段名>=最小值 and 字段名<=最大值
逻辑运算符在此处可通用:<
<=
>
>=
=
!=
集合函数: 使用方法与Java中的方法的使用类似,注意的是函数名后面紧跟着(),中间不能有空格 一 符合条件的记录的个数:countil
Select count(字段名)from 表名
where 查询条件 二 求某个字段的值的总和:sum Select sum(字段名)from 表名
where 查询条件 三 求某个字段的值的平均值:avg Select avg(字段名)from 表名
where 查询条件 四 求某个字段的值的最大值:max Select max(字段名)from 表名
where 查询条件 五 求某个字段的值的最大值:min Select min(字段名)from 表名
where 查询条件
多表查询:
笛卡尔积:select(字段1,字段n)from 表1,表n 自己想要的查询(找到所有被查询的表的相同的字段): Select(a.字段1,a.字段n,b.字段1,b.字段n)from 表名 as a,表名 as b where a.字段名=b.字段名;
联合查询:
左连接:select 字段名/* from 左表名
left join 右表名
on 左表名.字段名=右表名.字段名
查询结果:左表全部显示,右表与左表相同的字段名的部分显示 右连接:select 字段名/* from 左表名
right join 右表名
on 左表名.字段名=右表名.字段名
查询结果:右表全部显示,左表与右表相同的字段名的部分显示 内连接:select 字段名/* from 左表名
inner join 右表名
on 左表名.字段名=右表名.字段名
查询结果:只有左表与右表相同的部分才显示
全连接:select 字段名/* from 左表名
full join 右表名 查询结果:’*’的结果是笛卡尔积
‘字段名’的结果是这个字段名下的笛卡尔积
函数:函数名与小括号之间不能有空格,字符串必须用单引号圈起来
一 求字符串长度:length Select
length(字符串)二 字符串的截取:substring(字符串,m)/(字符串,m,n)Select
substring(字符串,m)/(字符串,m,n)三 小写转大写:upper Select
upper(字符串)四 大写转小写:lower Select
lower(字符串)五 加密:MD5 Select
MD5(字符串)六 显示现在的时间:now Select
now()
迷糊中: group by
order by 子查询
第五篇:数据库总结
数据库老师画的重点
数据库:数据库是长期存储在计算机内、有组织、可共享的大数据集合。数据库操纵功能:查询select、插入insert、删除delete、修改update 数据库系统的特点:1数据结构化2数据的共享高,冗余度低,易扩充3数据独
立性高4数据由DBMS统一管理和控制
数据模型的组成要素:数据结构、数据操作、完整性约束 概念模型:要出大体,画图 信息世界中的基本概念————
1、实体:客观存在并可以相互区别的事物称为实体
2、属性:实体所具有的某一特性
3、码(key):唯一标识实体的属性集称为码
4、域(domain):域是一组具有相同数据类型的集合
5、实体型(entity type):具有相同属性的实体必然具有共同的特征和性质。用实体名
及属性名集合来抽象和刻画同类实体,称为实体型。
6、实体集(entity set):同一类型的实体的集合
7、联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中
反应为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指
组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系
最常用的数据模型:
1、层次模型(Hierarchical Model)
2、网状模型(Network Model)
3、关系模型(Relational Model)
4、面向对象模型(Object Oriented Model)
5、对象关系模型(Object Relational Model)其中层次模型和网状模型统称为格式化模型
数据库系统的三级模式结构:
1、模式(scheme):模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。他是数据库系统模式结构的中间层,既不设计涉及数据的物理存储细节和硬件环境,也与具体的应用程
序、所使用的应用开发工具及高级程序设计语言无关。
2、外模式(external schema):外模式也称为子模式(subschema)或用户模式,他是数
据库用户(包括应用程序员和最终用户)能看见和使用
的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
3、内模式(internal scheme):内模式也称存储模式(storage schema),一个数据库只有
一个内模式。他是数据库物理结构和存储方式的描述,是
数据在数据库内部的表达方式。数据库的二级映像功能与数据库独立性————
为了能够在系统内部实现这3个抽象层次的联系和转换,数据库管理系统在这三个模式之间提供了两层映像:
·外模式/模式 映像 ·模式/内模式 映像
正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性 关系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的关系,表示
为R(D1、D2、D3···Dn)
这里的的R表示关系的名字,n是关系的目或度(degree)关系中每个元素是关系中的元组,通常用t表示 当n=1时,称关系为单元关系(unary relation),或一元关系 当n=2时,称该关系为二元关系(binary relation)
关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(attribute)。n目关系必有n个属性。
若关系中的某一属性组的值能够唯一的标识一个元组,则称该属性组为候选码(candidate key)
若一个关系有多个候选码,则选定其中一个为主码(primary key)候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute)或非码属性(non-key attribute)P46 没有搞明白干嘛使得!!!!!!!!!!!
关系的三类完整性约束:实体完整性、参照完整性、用户定义的完整性 实体完整性和参照完整性被称作关系的两个不变性
1、实体完整性(entity integrity):主码中的属性即主属性不能取空值
2、参照完整性(referential integrity):
若属性(或属性组)F是基本关系R的外码,它与基本关系S的的主码K相对应(基
本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
·或者取空值(F的每个属性值均为空值)·或者等于S中某个元组的主码值
SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言。SQL 的特点:
1、综合统一
2、高度非过程化
3、面向集合的操作方式
4、以同一种语法结构提供多种使用方式
5、语言简洁、易学易用 SQL的动词:
数据查询:select 数据定义:create、drop、alter(房间)修改表
数据操纵:insert、update(家具)修改数据、delete 数据控制:grant、revoke
绘制ER图————
在ER图中有如下四个成分:
矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下
划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上
标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对
多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体
连线方向各写N,M。
基本表是本身独立存在的表,在SQL中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也可以放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
基本表的定义、删除与修改:
1、定义基本表:create table ***()
2、定义主键:Primary key == not null(中间不用连接符号)unique
3、定义外码的语句:foreign key(某个字段)references 某表(某字段)
4、定义主码语句:primary key(***,***)
5、修改基本表:alter table 某表名 add 列名<数据类型>[完整性约束]
drop <完整性约束名>(字段名)
alter column<列名><数据类型>
6、删除表:drop table 表名[restrict | cascade级联删除]
7、建立索引:create [unique] [clustered] index 索引名
on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引
·unique表明此索引的每一个索引值只对应唯一的数据记录 ·用户可以在最经常查询的列上建立聚簇索引以提高查询效率 ·在一个基本表上只能建立一个聚簇索引
·建立局促索引后,更新该索引列上的数据时,往往导致表中记
录的物理顺序的额变更,代价较大,因此对于经常更新的列不
宜建立聚簇索引
8、删除索引:drop index <索引名>
上机的时候不太一样:drop index 表名。索引名字
9、数据的查询:
select [all | distinct] <目标列表达式>,······ from 表名或者视图名,··· where 条件表达式
group by 列名1 [having 条件表达式] order by 列名2 [asc | desc] ·如果有group by 子句,则结果按“列名1”的值进行分组,该属性列值相
等的元组为一个组。通常会在每组中作用聚集函数。如果group by 子句带
having短语,则只有满足指定条件的组才予以输出。
·如果有order by 子句,则结果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower
(Sdept)Department
from Student
lower表示小写
常用的查询条件————
比
较:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比较运算符
确定范围:between and,not between and 确定集合:in,not in 字符匹配:like,not like 空
值:is null,is not null 多重条件(逻辑运算):and,or,not
例子————
·select Sname,Sage
from Student
where Sdept(not)in(‘cs’,‘ma’,‘is’)
字符匹配:[not] like ‘字符串’[escape‘换吗字符’] 百分号表示任意长度、下划线表
示任意单个字符 聚集函数————
count([distinct | all] *)
统计元组个数 count([distinct| all] 列名)
统计一列中值的个数 sum([distinct| all] 列名)
计算一列值的总和(此列必须是数值型)avg([distinct| all] 列名)
计算一列的平局值(此列必须是数值型)max([distinct| all] 列名)
求一列中的最大值 min ·如果指定distinct短语,则表示在计算时要取消指定列中的重复值。如果不指定distinct
短语或者指定all短语(all为缺省值),则表示不取消重复。
·注意在聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。·注意where子句中不能用聚集函数作为条件表达式
group by子句————
where 子句与having 短语的区别在于作用对象不同。Where 子句作用对象作用于基本表或试图,从中选择条件的元组。Having短语作用于组,从中选择满足条件的组。
例子:select Sno from SC
group by Sno having count(*)>3 查询了选修3门以上课程的学生学号 链接查询—————— 例子:
非自然链接
·select Student.*,SC.*
from Student,SC
Where Student.Sno=SC.Sno
自然链接
·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno
自身链接
·select FIRST.Cno,SECOND.Cpno
from Course FIRST,Course SECOND
where FIRST.Cpno=SECOND.Cpno
外连接
·select Student.Sno,Sname,Sage,Sdept,Cno,Grade
from Student left outer join SC
on Student.Sno=SC.Sno ·左外链接列出左边关系中所有的元组,右外连接列出右边关系中的所有元组
嵌套查询
·select Sname from Student
where Sno in(select Sno from SC where Cno=‘2’)
·找出每个学生超过他选修课程平均成绩的课程号
Select Sno,Cno From SC x Where Grade >=(select avg(Grade)
From SC y Where y.Sno=x.Sno)
授权————
Grant 权限,····· On 对象类型 对象名,····· To 用户,·····
[with grant option]只一句表示权限的传递
例子: ·Grant all privileges
On Student,Course
To U1,U2
·grant update(Sno),select
on Student
to u4
·revoke update(Sno)
on table Student
from u4
一个满足BCNF的关系模式有:
·所有非主属性对每一个码都是完全函数依赖
3NF 编辑
3NF,即第三范式是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。满足第三范式(3NF)必须先满足第二范式(2NF)
2NF(第二范式)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个惟一属性列被称为主关键字或主键、主码。