10月5日培训日记的详细内容介绍

10月5日培训日记的详细内容介绍

今天由杰龙标软技术总监袁龙友老师讲解数据库设计思想,下面是张挺记录的日记:

105

首先再次复习了悲观锁和乐观锁的概念,个人觉得,对于这样的概念,死记硬背也不容易理解,还是要在实际的使用中慢慢体会。

接着讲解了游标的概念和实际用途,游标的本质就是一种循环访问记录的方式,也就是一段代码。

定义游标的语法是:Declare cursor

对比理解:如SwingAWT中的字体,实际上是系统的一种资源,是一种定义,游标也类似。

定义游标的语句中可以使用for关键字,游标也可以理解为一种悲观锁定。

和游标相关的FETCH@@FETCH_STATUS变量。其中,全局变量@@FETCH_STATUS<>0表示游标列,最后,记录已取完,while条件是这个变量等于0

使用游标的过程:

1. 定义游标

2. 打开游标

3. 循环遍历

4. 关闭游标

5. 释放资源

具体为:

1. declare StudentCur cursor for select * from student

2. open StudentCur

3. while……end

4. close(StudentCur)

5. DEALLOCATE StudentCur

将游标的结果放在resultset中,不是悲观锁,可以使用游标进行分页,其中,在SQL Server中,游标分页的性能不是最好的,比@@RowCount的方式差。而在ORACLE中,这种分页方式的性能是比较好的。所以在实际工作中,应该根据实际的环境来选择不同的方式。

T-SQL中,每个结果集都作为游标返回。显示游标和隐式游标的概念。

对于游标的学习,有个大致的认识就可以,在实际工作中,属于比较生僻的内容。

数据库设计:

通过一个学生成绩表来分析了常见的数据库设计错误:

1. 数据冗余

2. 更新异常

3. 插入异常

4. 删除异常

通过前面的设计错误,引出了数据库设计范式的概念,范式,就是软件工程中的设计模式在数据库设计中的说法。

数据库中的的范式有5种,常用的有以下三种:

第一范式(1NF

数据库表中的字段都是单一属性的,不可再分。(但也不是绝对的,反例如微软的Profile数据表的情况)

第二范式(2NF
数据库表中的一些非主键字段部分依赖于部分主键字段。此种情况只是针对主键是多个字段的情况。

第三范式(3NF

数据库表中的一些非主键字段部分依赖于其它非主键字段。

数据库设计的基本原则

1、正确反映数据与数据(信息与信息)之间的层次逻辑关系。

2、对进入到数据库中的数据有一个有效性检查

3、对数据库中的数据进行非逻辑操作进行相应的错误处理

4、满足系统对性能上的要求

ER建模

首先介绍了关系实体(E-R)的建模。

1. 在逻辑模型中是实体,在物理模型中就是具体的表。
如果两个对象是多对多的关系,在建模中的经验做法是加一个中间表,该表将多对多的两个表的主键作为它的联合主键,这个表叫做关系映射表。

2. 对于两个表的关系,分为确定性,非确定性,和不指定(多对多)

ERStudio工具的安装和使用。

一个实际的项目设计,论坛,需求为:

设计一个论坛,要求实现如下主要功能:

1、 要求实现版块管理,能够显示版块的名称,描述。

2、 要求实现论坛的管理,能够显示该论坛中的文章列表,在列表中的每篇文章要求显示其主题,发帖时间,浏览次数,最后回复时间,最后回复人。该版最后发帖时间与发帖人及发帖主题。一般来说论坛都比较多,用户还需求对这些论坛进行分类(按版块)管理。

3、 要求能够为论坛指定版主。

4、 要求实现只有注册用户才能访问论坛,并且要求限制每个用户只能访问特定的论坛。用户比较多,一般来说要求能够一次性对多个用户进行访问权限管理(类似于Windows中的用户组)。

5、 要求对论坛中的操作(删除,编辑,修改,回复)实现不同的用户不同的权限。

6、 要求对于用户访问论坛进行日志(登录,注销,发帖,删帖,编辑帖等等)记录。

7、 要求实现论坛用户好友管理。

8、 要求实现论坛用户的处罚管理(禁用IP,禁用用户ID,禁止发帖等)

9、 对于用户发帖,回复进行积分管理。

10月5日培训日记的详细内容介绍

其中,Board是版块表,Forum是论坛表,一个版块包含有多个论坛。每个论坛发的帖子是Article表,Reply是回复的帖子表,并将回复帖子表和Article分开设计,和设计在一起做了对比分析。UserDesc是用户信息表,而User是用户表,包含用户名和密码。版主是用户,也是属于论坛,它们之间分别建立了相应的关联关系。用户和角色、用户和权限分别都是多对多的关系,所以分别在它们之间建立了关系映射表。根据实际需要创建了字段。至此,一个论坛的数据库设计基本已经有了一个雏形,剩下的工作就是细化。第一次接触数据库设计,感觉很多思想性的东西是很重要的,另外就是对数据库设计的经验,和对行业知识的了解也是必不可少。培养设计的能力,不是一它两天能够成功的,重在积累!

下面是袁老师一步步现场讲解和画出的E-R图: