`
senton
  • 浏览: 200971 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

Sql Server游标和数据库设计

阅读更多

游标:
在java里面返回的ResultSet是一个游标,next()方法实质上是用java循环访问结果集。不能叫悲观锁定。游标实质上可以理解成一种资源。
1.游标分类:
 fetch first:提取游标第一行
 fetch next:提取游标下一行
 fetch prior:提取上次提取行之前的行
 fetch last:提取游标最后一行
 fetch absolute n:如果n为正整数,则提取游标中从第一行开始到第n行,如果为负整数则提取倒数第n行,为0则不提取任何行。
 fetch relative n:如果n为正整数,则提取上次所提取行之后的第n行,为负整数则提取上次所提取行之前的第n行,为0则同一行被提取

2.使用游标的步骤:
1).定义:declare 游标名 cursor for select语法 for()
2).打开游标:open 游标名
3).提取、滚动游标:
 fetch first from 游标名
 while @@fetch_status=0
 begin
  操作语句
 end
4).关闭游标:close 游标名
5).如果不需要则释放资源:deallocate 游标名

使用游标分页,这里暂时还没实现,下面给出实现的思路:
思路:定义游标,循环使用fetch语句跳过n行。此方法效率不是最好。如果在Oracle数据库里面效率会高些。

数据库设计:
1. 常见的数据库设计错误:
 1).数据冗余,依赖(比如姓名依赖于ID),用户不能接受的冗余必须改正。
 2).更新异常
 3).插入异常
 4).删除异常

2. 数据库的分析设计:
 1).收集信息
 2).抽象出概念,也即实体对象,一般都是名词。每个对象的详细信息转换为属性,一般也为名次。
 3).标识对象之间的关系,即映射基数(一对多和多对多)。

3. 数据库设计基本原则:
 1).正确反映数据与数据之间的层析逻辑关系。
 2).对进入数据库表中的数据有一个有效性检查。
 3).对数据库中数据进行非逻辑操作进行相应的错误处理
 4).满足系统对性能上的要求

4. 数据库设计三大范式,即数据库设计的规范做法,类似于设计模式(一些面向对象的设计方法和经验)。
 第一范式:数据表中的字段都是单一属性,不可再分(但也并非绝对)。比如有一个叫联系方式的字段,它还可以分为传真、电话、   手机,所以不满足第一范式。缺点:对此字段的某一个具体属性(例如手机)进行操作非常麻烦。解决方法:拆分列
 第二范式:数据表中的一些非主键字段必须依赖于主键字段,但不是部分依赖于主键字段。解决方法:拆分表。
 第三范式:数据库中的一些非主键字段不能依赖于其他非主键字段,也不能传递依赖于主键字段。解决方法:拆分表。

5. 数据库设计基本方法:实体关系模型(E-R建模)
 将实体转换成表,属性转换成字段(列),标识每个表的主键列,与各种约束(外键等)。
 
6. 数据库分析阶段是和数据库语言平台无关的,在设计阶段才和具体语言平台有关。逻辑模型:与数据库平台无关,物理模型:与数据库平台有关

 

7. 一些设计的小经验:
  1) 当两张表有多对多关系时,必须要拿出第三张表出来以这两个表的主键为组合主键,或者在第三张表中建一个主键,以另两张表的  主键为普通键,但应该在这两个键上建一个唯一索引。
 2)垂直分区:我们以一个小例子来说明这个概念,假如有一张人才网用户的个人简历表,里面有用户名、密码和大量的简历信息,因  为在用户登录时,用户名和密码用的特别频繁,所以我们可以把此两个字段抽出来单独建一张表,其他的字段作为一张表,把用户名  作为此表的主键,和前面的表形成一对一的关系。这就是所谓的垂直分区。
 3)在实际应用中也并一定要严格按照三大范式来规范数据库设计,必须根据客户的要求和实际的需要以及系统的性能问题等各方面来 考虑。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics