您的位置:首页 > 数据库

数据库的三范式、数据库的锁机制、数据库索引原理

2012-07-13 17:16 134 查看
今天上午去面试,看到这三道题,我卡神了。。。貌似一个也不知道,但用手机小小的百了一下,才回过神了……

对这些名词太不感冒了。这可让我情何以堪。

不过话又回来,知道、了解有这么个事。其实也的确只知皮毛,不然不会对这个专业术语没啥概念了,以此为打击,特写了此文(也算是整理的吧)仅供参考,希望对重位亲们有用。

<!----------数据库的三范式-----------!>

首先来说数据库的三范式:从优点谈起吧,对数据库设计大有好处。它是是为了消除数据冗余、减少数据操作异常出现的。

如果想更好地应用三个范式,就必须通俗地理解三个范式。

第一范式:原子性,字段不可再分;是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

第二范式:唯一性,在第一范式基础上,要求数据表的中的每个实例或行必须可以被唯一的区分。为实现区分通常需要为表加上一个列,一储存各个实例的唯一标示,即没有重复的记录。

第三范式:无冗余性,第二范式基础上,消除间接依赖(某些字段不完全依赖主键的,可以将其移除)也就是任何字段不能由其他字段派生出来,它要求字段没有冗余

数据库的设计要尽量遵循范式设计,这样才能减少冗余数据,减少出错的异常

但是,没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余

<!------------数据库的锁机制--------!>

其实讲关于数据库的锁机制,数据库的锁机制主要是为了解决数据库数据并发及保证数据的一致性而产生的技术。这是我个人的理解,具体讲解如下:

1、基本锁类型
锁包括行级锁和表级锁
行级锁是一种“排他锁” ,防止其他事务修改此行;在使用以下语句时,Oracle会自动应用行级锁:

INSERT、UPDATE、DELETE、SELECT … FOR UPDATE [OF columns] [WAIT n | NOWAIT];

SELECT … FOR UPDATE语句允许用户一次锁定多条记录进行更新

使用COMMIT或ROLLBACK语句释放锁
表级锁又分为5类:
行共享 (ROW SHARE) – 禁止排他锁定表

行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁

共享锁(SHARE) - 锁定表,对记录只读不写,多个用户可以同时在同一个表上应用此锁

共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁

排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表
2、乐观锁与悲观锁
所谓悲观锁就是基于数据库机制实现的。比如在在使用select子句的时候加上for update,那么直到改子句的事务结束为止,任何应用都无法修改select出来的记录。
所谓乐观锁是基于应用的版本机制来实现的。一般会在表里面设计一个版本字段v(我一般会把这个字段设为timestamp)。一般的update场景是这样:
1 select a, v from tb where id=1;
假设得到数据是:['xxx', 11111]
2 update tb set a='yyyy', v=systimestamp where v=11111; //注意, v一般不会在业务操作的时候修改
这要求每一次update操作都变更版本字段,否则还是要进程间的数据 还是会被相互覆盖。
乐观锁无法锁定其他应用对数据的操作。
锁(locking)
业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改
Hibernate支持两种锁机制:即通常所说的“悲观锁(Pessimistic Locking)” 和“乐观锁(Optimistic Locking)”。
再谈一下具体到加的应用,以Oracle为例:
http://www.jcwcn.com/article-30041-1.html

<!------------数据库索引原理--------!>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: