. . . . .. .
第四章 逻辑结构设计
4.1 E-R图向关系模型转换
1 教师(教师编号,,性别,工作时间,政治面貌,学历,职称,联系电话)
2 学生(学号,,性别,出生日期,班级编号,政治面貌,毕业学校) 3 课程(课程编号,课程名,课程类别,学分)
4 成绩(成绩ID,学号,学年,学期,课程编号,成绩)
5 授课(授课ID,课程编号,教师编号,班级编号,学年,学期,学时,时间,地点)
6 选课(选课ID,课程编号,学号)
4.2 数据模型的优化
将关系模式进行优化,最终达到第三范式 教师(教师编号,,性别,工作时间,政治面貌,学历,职称,联系电话) 教师编号 ,教师编号 性别,教师编号 工作时间,教师 学历 选课(选课ID,课程编号,学号)
选课ID 课程编号,选课ID 学号
授课(授课ID,课程编号,教师编号,班级编号,学年,学期,学时,时间,地点)
授课ID 课程编号,授课ID 教师编号,授课ID 班级编号 学生(学号,,性别,出生日期,班级编号,政治面貌,毕业学校) 学号 ,学号 性别,学号 班级编号
课程(课程编号,课程名,课程类别,学分)
课程编号 课程名,课程编号 课程类别,课程编号 学分 成绩(成绩ID,学号,学年,学期,课程编号,成绩) 成绩ID 学号,成绩ID 成绩,成绩ID 课程编号
4.3 设计用户子模式
用户子模式
编号 用户子模式名称 定义 作用
1 2 3 4
student—view 学生信息视图 方便用户查询 teacher_view 教师信息视图 方便用户查询 clsaa_view 授课信息视图 方便用户查询 grade_view 成绩信息查询 方便用户查
第五章数据库的物理设计
c. .. .. .
. . . . .. .
5.1数据库物理设计内容
通常对关系数据库物理设计的内容主要包括: 1为关系选择存取方法,建立存取路径;
2 确定数据库存储结构,即是确定关系,索引,聚簇,日志,备份等数据的存储安排和存储结构; 3 确定系统配置。
5.2 关系存取方法选择
1存取方法的概述
常用的存取方法有索引方法,hash方法,聚簇方法等
索引方法有多种,常用的有B+树索引,基于函数的索引,反向索引,位映射索引等;
Hash方法是用hash函数来存储和存取关系记录的方法。具体就是指定某个关系上的一个属性A座位hash码,然后对该hash码定义一个函数,关系记录的存储地址有hash来决定;
聚簇方法为了提高某个属性的查询速度,把这个或这些属性上具有相同值得元祖级和中存放在连续的物理块中称为聚簇。 2 存取方法选择
1 索引存取方法的选择
所谓选择索引存取方法实际上就是根据应用要求确定对关系的那些属性列建立索引,哪些属性列建立组合索引,哪些索引要设计为唯一索引等 如果一个属性经常在查询条件中出现,或者经常作为最大值和最小值等聚集函数的参数,或者经常在连接操作的连接条件中出现,则考虑在这个书向上建立索引。
关系上定义的索引数并不是越多越好,系统为维护索引要付出代价,查找索引也要付出代价。
2 hash存取方法的选择
有些rdbms提供了hash存取方法。选择hash存取方法的一般原则是,如果一个关系的属性主要出现在等连接条件中或者主要出现在相等比较选择条件中,而且一个关系的大小可预知且变化不大,则此关系可以选择hash存取方法。 3 聚簇存取方法的选择
选择聚簇存取方法,即确定需要建立多少个聚簇,每个聚簇中包括哪些关系。 必须强调的是,当通过聚簇码进行访问或链接是该关系的主要应用,与聚簇无关的其他访问很少或者是次要的时,可以使用聚簇。尤其当SQL语句中包含有与聚簇码有关的order by,group by,union,distinct等子句或短语时,使用聚簇特别有利,可以省去或结果集的排序操作。否则很可能会适得其反。而且维护聚簇的开销是相当大的。对已有关系建立聚簇,将导致关系中元组物理存储位置的移动,并使此关系上原有的索引无效,必须重建。当一个元组的聚簇码值改变时,该元组的存储位置也要做相应移动。
5.3 确定数据库的存储结构
1确定数据的存放位置
存放在C盘,并且分配2M的空间,而且文件的存储空间可以随着数据库的增
c. .. .. .
. . . . .. .
大而增大,即文件增长不受限制。文件的增长按百分比进行,增长百分比为10% 2 确定系统配置
数据库可以公共访问,可以打开任意个数据库对象,内存分配高于2M的内存空间。
5.4评价物理结构
数据物理设计过程中需要对时间效率,空间效率,维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对这些方案进行细致的评价,从中选择一个较为优秀的方案作为数据库的物理结构。 评价物理数据库的方法完全依赖于所选用的rdbms产品,主要是估计各种方案的存储空间,存取空间和维护代价,对估计结果进行权衡,比较,选择出一个较优的合理的物理结构。
第六章 数据库的实施
6.1 实现系统主要代码
protected void Button1_Click(object sender, EventArgs e) {
string txtcc = Request[\].ToLower();
string checkcode = Convert.ToString(Session[\]);
//判断验证码
if (txtcc == checkcode) {
string username = Request[\]; string userpsw = Request[\];
string Tclass = this.RadioButtonList1.SelectedValue.ToString(); //if(Tclass==\ //{
// userpsw = FormsAuthentication.HashPasswordForStoringInConfigFile(userpsw, \ //}
SqlDAL sql = new SqlDAL();
bool isuser=sql.ValidUser(username, userpsw,Tclass); if (Tclass == \) {
isuser = sql.ValidS_User(username,userpsw); }
if (isuser) {
string strUserId = this.yh.Text;
ArrayList list = Application.Get(\) as ArrayList; if (list == null)
c. .. .. .
. . . . .. .
{
list = new ArrayList(); }
for (int i = 0; i < list.Count; i++) {
if (strUserId == (list[i] as string)) {
//已经登录了,提示错误信息
Response.Write(\该用户已经登录!')\); return; } }
list.Add(strUserId);
Application.Add(\, list); //登录成功,保存教师编号 if (Tclass == \) {
SqlDataReader dr = sql.GetLogin_Departid(username, userpsw, Tclass); dr.Read();
Session[\] = dr[\].ToString(); dr.Close(); } else {
Session[\] = username; }
Session[\] = Tclass; //定位到主页面
Response.Redirect(\); } else {
Response.Write(\登录失败!')\); this.txtcc.Text = \; } } else {
Response.Write(\验证码不正确!')\); this.txtcc.Text = \;
6.2数据的载入和应用程序的调试
c. .. .. .
. . . . .. .
添加记录的代码如下:
取消按钮的代码如下:
退出按钮的代码如下:
保存按钮的代码如下:
退出窗体的按钮代码如下:
c. .. .. .