??xml version="1.0" encoding="utf-8" standalone="yes"?>
交叉q接
两个表所有行l合Q连接后的行Cؓ(f)两个表行数的乘积Q笛卡尔U)(j)
语法Q借用上面的例子应该是
行数应该?2?Q?br />
]]>
范式说明
W一范式Q?NFQ:(x)数据库表中的字段都是单一属性的Q不可再分。这个单一属性由基本cd构成Q包括整型、实数、字W型、逻辑型、日期型{?br />
例如Q如下的数据库表是符合第一范式Q?
字段1 | 字段2 | 字段3 | 字段4 |
? | ? | ? | ? |
字段1 | 字段2 | 字段3 | 字段4 | |
? | ? | 字段3.1 | 字段3.2 | ? |
很显?dng)在当前的M关系数据库管理系l(DBMSQ中Q傻瓜也不可能做ZW合W一范式的数据库Q因些DBMS不允怽把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的?br />
W二范式Q?NFQ:(x)数据库表中不存在非关键字D对M候选关键字D늚部分函数依赖Q部分函C赖指的是存在l合关键字中的某些字D决定非关键字段的情况)(j)Q也x有非关键字段都完全依赖于L一l候选关键字?br />
假定选课关系表ؓ(f)SelectCourse(学号, 姓名, q龄, 评名称, 成W, 学分)Q关键字为组合关键字(学号, 评名称)Q因为存在如下决定关p:(x)
(学号, 评名称) → (姓名, q龄, 成W, 学分)
q个数据库表不满第二范式,因ؓ(f)存在如下军_关系Q?br />
(评名称) → (学分)
(学号) → (姓名, q龄)
卛_在组合关键字中的字段军_非关键字的情c(din)?br />
׃不符?NFQ这个选课关系表会(x)存在如下问题Q?br />
(1) 数据冗余Q?br />
同一门课E由n个学生选修Q?学分"重复n-1ơ;同一个学生选修?jin)m门课E,姓名和年龄就重复?jin)m-1ơ?br />
(2) 更新异常Q?br />
若调整了(jin)某门评的学分,数据表中所有行?学分"值都要更斎ͼ否则?x)出现同一门课E学分不同的情况?br />
(3) 插入异常Q?br />
假设要开设一门新的课E,暂时q没有h选修。这P׃q没?学号"关键字,评名称和学分也无法记录入数据库?br />
(4) 删除异常Q?br />
假设一批学生已l完成课E的选修Q这些选修记录应该从数据库表中删除。但是,与此同时Q课E名U和学分信息也被删除?jin)。很昄Q这也会(x)D插入异常?
把选课关系表SelectCourse改ؓ(f)如下三个表:(x)
学生QStudent(学号, 姓名, q龄)Q?br />
评QCourse(评名称, 学分)Q?br />
选课关系QSelectCourse(学号, 评名称, 成W)?br />
q样的数据库表是W合W二范式的,消除?jin)数据冗余、更新异常、插入异常和删除异常?br />
另外Q所有单关键字的数据库表都符合第二范式,因ؓ(f)不可能存在组合关键字?br />
W三范式Q?NFQ:(x)在第二范式的基础上,数据表中如果不存在非关键字段对Q一候选关键字D늚传递函C赖则W合W三范式。所谓传递函C赖,指的是如果存?A → B → C"的决定关p,则C(j)传递函C赖于A。因此,满W三范式的数据库表应该不存在如下依赖关系Q?br />
关键字段 → 非关键字Dx → 非关键字Dy
假定学生关系表ؓ(f)Student(学号, 姓名, q龄, 所在学? 学院地点, 学院?sh)?Q关键字为单一关键?学号"Q因为存在如下决定关p:(x)
(学号) → (姓名, q龄, 所在学? 学院地点, 学院?sh)?
q个数据库是W合2NF的,但是不符?NFQ因为存在如下决定关p:(x)
(学号) → (所在学? → (学院地点, 学院?sh)?
卛_在非关键字段"学院地点"?学院?sh)?对关键字D?学号"的传递函C赖?br />
它也?x)存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知?br />
把学生关p表分ؓ(f)如下两个表:(x)
学生Q?学号, 姓名, q龄, 所在学?Q?br />
学院Q?学院, 地点, ?sh)??br />
q样的数据库表是W合W三范式的,消除?jin)数据冗余、更新异常、插入异常和删除异常?br />
鲍依?U得范式QBCNFQ:(x)在第三范式的基础上,数据库表中如果不存在M字段对Q一候选关键字D늚传递函C赖则W合W三范式?br />
假设仓库理关系表ؓ(f)StorehouseManage(仓库ID, 存储物品ID, 理员I(y)D, 数量)Q且有一个管理员只在一个仓库工作;一个仓库可以存储多U物品。这个数据库表中存在如下军_关系Q?br />
(仓库ID, 存储物品ID) →(理员I(y)D, 数量)
(理员I(y)D, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)?理员I(y)D, 存储物品ID)都是StorehouseManage的候选关键字Q表中的唯一非关键字Dؓ(f)数量Q它是符合第三范式的。但是,׃存在如下军_关系Q?br />
(仓库ID) → (理员I(y)D)
(理员I(y)D) → (仓库ID)
卛_在关键字D决定关键字D늚情况Q所以其不符?BCNF范式。它?x)出现如下异常情况?x)
(1) 删除异常Q?br />
当仓库被清空后,所?存储物品ID"?数量"信息被删除的同时Q?仓库ID"?理员I(y)D"信息也被删除?jin)?br />
(2) 插入异常Q?br />
当仓库没有存储Q何物品时Q无法给仓库分配理员?br />
(3) 更新异常Q?br />
如果仓库换了(jin)理员,则表中所有行的管理员I(y)D都要修改?br />
把仓库管理关p表分解Z个关p表Q?br />
仓库理QStorehouseManage(仓库ID, 理员I(y)D)Q?br />
仓库QStorehouse(仓库ID, 存储物品ID, 数量)?br />
q样的数据库表是W合BCNF范式的,消除?jin)删除异常、插入异常和更新异常?br />
原帖地址Q?http://www.cublog.cn/u/23975/showart.php?id=391210
事务h四个特征Q原子性( Atomicity Q、一致性( Consistency Q、隔L( Isolation Q和持箋性( Durability Q。这四个Ҏ(gu)简UCؓ(f) ACID Ҏ(gu)?br />
1 、原子?br />
事务是数据库的逻辑工作单位Q事务中包含的各操作要么都做Q要么都不做
2 、一致?nbsp;
事务执行的结果必L使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时Q就说数据库处于一致性状态。如果数据库pȝ q行中发生故障,有些事务未完成pq中断,q些未完成事务对数据库所做的修改有一部分已写入物理数据库Q这时数据库处于一U不正确的状态,或者说?不一致的状态?nbsp;
3 、隔L?br />
一个事务的执行不能其它事务q扰。即一个事务内部的操作?qing)用的数据对其它ƈ发事务是隔离的,q发执行的各个事务之间不能互相干扰?br />
4 、持l?br />
也称怹性,指一个事务一旦提交,它对数据库中的数据的改变应该是怹性的。接下来的其它操作或故障不应该对其执行结果有M影响?br />
数据库系l是允许多个用户׃n数据库资源,其是多个用户可以同时存取相同数据。(多用户同时对一个表操作也就是ƈ发)(j)
我们主观上虽不想q么做,可是q种情况是存在的Q没有原因。而ƈ发会(x)破坏事务ACIDҎ(gu)?Q隔L,一致性)(j)?/p>
q发?x)带来下列问题?x)
脏读Q一个事务读取了(jin)未提交的事务
不可重复读:(x)同一个事务中多次d同一个数据返回的l果不同
q读Q一个事务读取到?jin)另一个事务已提交的insert数据?br />
如果应用E序使用完全隔离的事务,那么同时执行多个事务的效果将与串行执行(一个接一个的序执行Q完全等效。ؓ(f)解决事务之间的ƈ发带来的个问题,必须在事务之间徏立隔dp(使用隔离U别Q?/p>
事务的隔ȝ别:(x)是对事务ƈ发控制的{QANSI/ISO SQL其分ؓ(f)串行化(SERIALIZABLEQ、可重复读(REPEATABLE READQ、读已提交(READ COMMITEDQ、读未提交(READ UNCOMMITEDQ四个等U?br />
1 SerializableQ最严格的别,事务串行执行Q资源消耗最大;
2 REPEATABLE READQ读取数据的事务允许其他事务l箋讉K该行数据Q但是未提交的写事务会(x)止其他事务讉K该行。避免了(jin)“脏读?#8221;?#8220;不可重复d”的情况,但是带来?jin)更多的性能损失?br />
3 READ COMMITTED:大多C数据库的默认事务等U,保证?jin)一个事务不?x)读到另一个ƈ行事务已修改但未提交的数据,避免?#8220;脏读?#8221;。该U别适用于大多数pȝ?br />
4 Read UncommittedQ最低的事务隔离U别,保证?jin)读取过E中不会(x)d到非法数据?br />
隔离U别 | 脏读 | 不可重复?/td> | q读 |
Serializable | 不会(x) | 不会(x) | 不会(x) |
REPEATABLE READ | 不会(x) | 不会(x) | ?/td> |
READ COMMITTED | 不会(x) | ?/td> | ?/td> |
Read Uncommitted | ?/td> | ?/td> | ?/td> |
׃n锁:(x)׃n锁用于读取数据操作,它允许其他事务同时读取某锁定的资源,但不允许其他事务更新它?br /> 排他锁:(x)排它锁用于修Ҏ(gu)据的场合。它锁定的资源,其他事务不能d也不能修攏V?br /> 更新锁:(x)更新锁在更新操作的初始化阶段用来锁定可能要被修改的资源,从而避免用共享锁造成的死锁现?/p>
常见的ƈ发控刉
http://hahalzb.blogbus.com/logs/19150842.html ?j)晴怡然