10月5日培训日记的详细内容介绍
10月5日培训日记的详细内容介绍
今天由杰龙标软技术总监袁龙友老师讲解数据库设计思想,下面是张挺记录的日记:
10月5号
首先再次复习了悲观锁和乐观锁的概念,个人觉得,对于这样的概念,死记硬背也不容易理解,还是要在实际的使用中慢慢体会。
接着讲解了游标的概念和实际用途,游标的本质就是一种循环访问记录的方式,也就是一段代码。
定义游标的语法是:Declare cursor
对比理解:如Swing、AWT中的字体,实际上是系统的一种资源,是一种定义,游标也类似。
定义游标的语句中可以使用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、 对于用户发帖,回复进行积分管理。
其中,Board是版块表,Forum是论坛表,一个版块包含有多个论坛。每个论坛发的帖子是Article表,Reply是回复的帖子表,并将回复帖子表和Article分开设计,和设计在一起做了对比分析。UserDesc是用户信息表,而User是用户表,包含用户名和密码。版主是用户,也是属于论坛,它们之间分别建立了相应的关联关系。用户和角色、用户和权限分别都是多对多的关系,所以分别在它们之间建立了关系映射表。根据实际需要创建了字段。至此,一个论坛的数据库设计基本已经有了一个雏形,剩下的工作就是细化。第一次接触数据库设计,感觉很多思想性的东西是很重要的,另外就是对数据库设计的经验,和对行业知识的了解也是必不可少。培养设计的能力,不是一它两天能够成功的,重在积累!