一、 需求分析
1、从用户那里采集数据,根据部门功能不同,总结出每个部门的需求,形成表格.与甲方讨论方案。 2、需要设计的实体有哪些? 学生的学籍(学生基本信息)
学生选课(学号,课程名,教师,时间,学分,课时)
上课(课程表,上课时间,教室,教师,课程名,周数,班级) 考试考核(不维护)
成绩(学号,课程名,学期,学分,成绩)
考试课:0-100,整数 考查课:5个等级,字符型 3、找出实体间的联系及联系的类型。
教师---—学生------课程(选课,上课)多对多 m:n:p 教室-—-—学生--—-—课程----—教师(上课) 教师—---班级———-课程(上课) 4、完成实体关系图 分实体关系图:
经分析,选课也作为一个实体存在,包含成绩
将各个分开的实体关系图综合成一个系统的E-R图. 以上需求分析和概念结构设计。 上课使用的实体关系: 学生() 课程() 选课()
5、考虑系统数据应该保存在什么样的容器中?数据库 5.1数据库结构的设计(逻辑,物理) (1) 数据库包含的逻辑文件 数据文件:存储数据
主数据文件:数据库的引导文件,***。mdf 辅助数据文件:***.ndf,多个
日志文件:存储用户对数据的更新(录入,修改,删除) 大容量查询,用户登录信息,***.ldf
注:每个数据库至少包含一个数据文件,一个日志文件 (2) 数据库物理结构,文件存储位置
考虑问题:数据量的增加,数据的丢失(数据备份), 数据库服务器(后备电源) (3) 每个文件有什么参数? 有五个参数:
逻辑名 name=用户定义的名字
物理名 filename=存储路径+逻辑名+后缀 初始大小 size=5 size=5m size=5gb 自动增长方式filegrowth=3
filegrowth=10%(按照初始大小的10%)
最大大小 maxsize=50 --问题1
如何不让文件自动增长?filegrowth=0
最大大小无限制的表示方法?maxsize=unlimited 5.2 如何创建一个数据库?
(1)创建一个最简单的数据库
适合于对于文件没有任何限制的情况。 例子1:创建一个名称为test的数据库。 Create database test
Test中的数据文件和日志文件都自动在安装目录创建。 C:\\program files\\microsoft sql server\\mssql.1\\mssql\\data 存在test.mdf test_log。ldf
问1:安装后2005中有多少个系统数据库?都有什么功能?5个
例子2:创建一个数据库test1,包含一个主数据文件,一个日志文件,保存在d:\\database\\11文件夹中,两个文件的初始大小都为3mb,数据文件按照10%比例自动增长,日志文件按照3mb增长,每个文件的最大大小150m。
注:数据库—文件组(数据文件) ———日志文件
例3:创建数据库test2,该数据库主文件组中包含2个数据文件,同时还有一个日志文件,保存路径自定义,其他属性按照默认值处理.
【问1】每个同学建立一个数据库,用于存储学生成绩管理系统的数据,数据库名:stumanage.该数据库中有一个数据文件,一个日志文件。
【问2】创建数据库test3,在主文件组中包含一个数据文件,在用户自定义的文件组mygroup中包含一个辅助数据文件,该数据库有两个日志文件,存储路径自定义。 可参考如下结构修改: Create datedaes test3 On mygroup
(辅助数据文件定义) Filegroup primary (主数据文件定义) Log on
(日志文件1定义), (日志文件2定义)
5。3 修改数据库结构,以test1为例 修改的语句:
Alter database 数据库名
增加 删除
数据文件add file(文件的参数)--—remove file 逻辑名 日志文件add log file( )-————-—-—无法实现
文件组add filegroup 名字—-—-remove filegroup 名字 【注】删除文件组的时候,先判定文件组是否为空? 错误提示:消息5042,级别16,状态7,第1 行
无法删除文件组'mygroup',因为它不为空。
改善方法:删除文件组内的文件 删除文件组 5。4 删除数据库
Drop database 数据库名
——
6、数据库对象的设计----—-—数据表
数据库 -—-—— 数据表 -——-—— 数据 (1) 从哪里知道数据表的对应关系?
从实体关系图中,每个实体就是一个数据表 具有自己属性的联系也是一个数据表.
(2) 数据表的结构?
学生(学号,姓名,性别,年龄,专业,联系方式) 学号 姓名 性别 年龄 专业 10334101 张丽 女 20 计算机网络 Y11020301 李阳阳 男 24 通信工程 (3) 每个属性列的类型? 学号:字符型,varchar(9) 姓名:varchar(10)
性别:char(2) 取值范围限制 年龄:tinyint
专业:varchar(50)
联系方式:varchar(18) (+86)0411-66846532 (4) 数据表的创建 练习:
1、 创建课程表course
(课程号cno(10),课程名cname,学时ctime, 学分ccredit,先修课号cpno) 2、 创建选课表sc
(学号sno, 课程号cno, 成绩grade) (5) 修改表的结构 之一:修改列的定义 Alter table 表名
Alter column 列名 类型(长度) null/not null 之二:非空约束的增加 Alter table 表名
Alter column 列名 类型(长度) not null 注意区分NULL与‘NULL'的区别? 之三:约束的增加,唯一值约束的增加 unique Alter table 表名
Add constraint 约束名 unique(列名1,列名2,。。) 之四:主键约束的增加(主码等价于非空且唯一) Alter table 表名
Add constraint 约束名
primary key(列名1,列名2,.。)
选课表的数据举例: sno cno grade S01 C01 78 S01 C02 69 S02 C01 58 S03 C02 89 联系方式 18641338070 024-23975420 选课表的主键(sno,cno) 之五:删除约束 Alter table 表名
Drop constraint 约束名 实验一,数据库和表的创建
1、 建立用户自定义数据库,名称为stumanage。文件的属性自定义,至少包含2个文件,同时要求限
定每个文件的最大大小。
2、 在stumanage数据库中建立表,建立的表可以实现学生基本信息,教师基本信息,教室基本信息,
课程基本信息及学生上课信息的管理。
实体自己设计 实体名(属性1,属性2,…) 实体间关系设计,并用文字标识出类型
3、 要求每个表有主键及非空约束的限制。
同时根据需求设计唯一值和检查约束.
1.数据操作做语言
录入insert;查询select;更新update;删除delete 2.录入
单行insert into 表名 values(…。) 【注】字符型数据需要单引号 整型和数值型不需要引号
值与列之间是一一对应,值需要符合列的长度 对于有默认值的列,需要使用第二种单行录入 【多行录入】 3.查询:
(1)select * from 列名 查询(单表) Select 目标列{(1)*,列名; (2)列1,列2;(3)别名:列1 as 列名;(4)常量字符串:+列 ‘字符串’;(5)}
Where选择条件:
{(1)比较运算符 <〉,!= 列=值 (2)在…。范围内 between…and… [等价于]列>=值1 and 列〈=值2 [否定]列 not between…and… (3)多条件连接 and or (4)在…集合之间 in(…) [等价于]列=值1 or列=值2 or… [否定]列 not in (…)
(5)类似于 列 like‘匹配串’ 通配符{
_: 单个字符 ‘王_’
%:0个或多个字符 ‘王%’ ‘%工程%’ [ ]:单个字符的取值范围 ‘[ a-z]%' [^ ]:不在该范围内 ‘[^ ]%’ Escape ‘\\’转义字符‘c\\_%’} —---& }
聚合函数 (功能:计算平均值和总和)
group by 列(sno) (可以把表分成组,并对组进行汇总) Count(sno) Min(sage) 求平均:avg(grade)
Having 选择条件(对分组后结果) Order by 列
{
asc 升序 默认 desc 降序 }
Order by sage desc
使用group by子句不能保证结果有序,如果希望结果有序排列,可以使用order by子句。 Top n的使用: top n ;top n percent 多表间的连接查询 (2)select *
(1)from 表1,表2 Where 连接条件 Student.sno=sc。sno
一:等值连接:(表名.列名) where 连接条件 and 表连接条件
二:内连接: from 表 1 inner join 表2 on(连接条件) ——--注:“inner”可写可不写 三:外连接:from 表1(主) left outer join 表2(副) on(连接条件) 左外 -—outer可有可无 From 表1(副) right join 表2(主) on(连接条件) 右外 分组:对select后有限制,可出现在{聚合函数中,group by子句 列1,列2} 表的别名 from course c1 嵌套查询
4.数据更新: 数据删除:
Update 表 delete from 表 Set 列=值 where 选择条件 Where 选择条件
集合查询 并 union
目标列个数一致,列的类型相同 Select 列1,列2 From Where Union Select 列1,列2 From Where 视图
1.虚拟的表。
DB只存储其结构, 2.创建,修改,删除
3.在表或视图的基础上创建
4.可进行DB的查询,更新(受限的更新),删除 5.创建
Create view 名字(列1,列2) As Select语句 结果为:命令成功执行 (1)基于表的view (2)基于视图的view
(3) 统计运算 (4) 分组
(5) 连接查询
6.数据的更新(受限的更新) Update 视图 Set 列=值 Where 条件 变量
全局变量:@@version
系统中固定定义,用户不可以修改 局部变量:用户自定义, 表示:@名字
声明 declare @a 类型 赋值 { set @a=‘专业。。.' Select @a=值 }
显示: { select @a
Print @a/语句格式 (连接符 ‘字符串1’+ 数据类型的转换:cast(变量 as 类型) 赋值:set 变=值
Set 变=(select查询) Select 变=列 from。。.
流程控制语句 1。if 。。.else (可以嵌套) If exists(select语句) Begin ... End Else
2.while(select语句成立) Begin 。.。 End
3.多分支结构
Select 列1,列2, Case 列3
When '表中值1' then ‘显示值1’ When '表中值2’ then ‘显示值2’ 。。。
End as ’别名' From 表 存储过程 (1)系统:“sp_/xp_”开头
Sp_helpDB 数据库名 (2)用户自定义(带参数) (3)(无参数) Create proc 名字 As
语句 select,insert,update,delete 1.无参数
Create proc 名字
2')‘字符串 As
处理 执行
2.节输入(用户输入,where,having) Create proc 名@a 类(长),@b 类(长)=“初始值” As Begin
Select.。。 From..。 Where 列1=@a and 列2=@b End
(4)执行方法 Exec 存储过程名 Exec 名 ‘值’
方法一: exec 名字 ‘值1’,‘值2' 方法二: declare @c1 类 (与@a同) declare @c2 类 (与@b同) Set @c1=’s03’ Set @c2=’名字' Exec p4 @c1,@c2 测试:(测试用例设计)
用例 预期结果 实际结果 存在问题 (4)带输出参数的 学号= 一致 Create proc 名字 @a int,@b ‘s01’ As 差异修改 Select @b=列 from。.. Where 列=@a
触发器
约束 insert,update,delete 触发器应用在某个表中 Create trigger 名字 On 表
For insert,update,delete As
1.分类:{ (1):
DML:(数据操纵语言) insert,update,delete DDL:(数据定义语言)3种 create,alter,drop
【注】DCL(数据控制语句) grant授权,revoke回收权限 (2):
时机不同:{
Alter/for 在表上创建;
Instead of代替引发触发器的语句 }}
2.同时显示修改前和修改后的数据 3.临时表a。
逐条查找:(游标) 1.声明 cursor
Declare 名字 cursor Select 语句 2.打开游标 Open 名字
类(长)
3.移动到行
Fetch next from 名 into 变量 4.循环取值
5.While @@fetch_ststus=0 Begin.。。。end 5.关闭
Close 名字 6.释放
Deallocate 名字 用户名和密码: 用户表:users {
用户名:uname 密码:pwd
权限类型:utype }
备份和还原
Create database y1 1)。DB 2).备份: 完整 周一
差异 周二-周五 事务日志
3).备份到文件 *.back 称为备份文件 4)新建一T 同名 DB
5)在同名DB上还原{从备份设备;覆盖现有} 考试:1小时 中午12点
1)数据库创建
2)约束(创建两个表之间的关系(意思是建外建))
3)数据查询(单表,连接,6个查询条件,目标列可以使用集合函数,三个表的连接至少要有2个连接条件)
4)数据更新 update 表 set列=值 Where 条件 5)视图的创建
6)存储过程,带参数
因篇幅问题不能全部显示,请点此查看更多更全内容