数据库设计和事务

#数据库设计
·数据库设计的一个主要目的是消除数据库的冗余。为此要使用标准化(normalization)技术
·数据库冗余:如数据库表中的多行数据有重复出现的情况,这回导致两个问题:
    1)每次查询时,都必须一次又一次的输入同一查询条件;
    2)也是更为重要的,如果任何一个数据发生了变化,就必须在多个位置上进行更新。
·实体(entity,即表):是关于要获取哪些数据的重要实物或对象,不是所有的“事物”都是实体,只有那些你

需要从中获得信息的事物才是实体。如果某事物不具有属性或关系,那么它就不是真正的实体。·每个实体实例

代表表中的一行。
·实体属性(即表中的字段):描述有关必须得到的实体的信息。
·实体实例(即表中的行)
·数据库模型:是数据库设计的图解,在设计数据库的第一步即建立逻辑数据模型,不需要考虑属性是如何存储


·数据库实体在数据库模型中被标示为一个方框
·数据库标准化:消除数据库设计中某些不符合要求的特性,确切的讲,其目标是去除某种数据冗余,从而避免

更新异常。20世纪70年代,有IBM的研究员E.F.Codd在几篇重要的论文中提出。
·更新异常是由于数据结构方面的原因,在数据库进行插入、更新和删除操作时造成的困难。
·标准化的一般概念包括几个“范式”(normal form)
·第一范式(1NF):所有属性(即字段的值)的值是单一的。必须要验证实体的每个属性对应于实体的每个实例

都有单一的值。如果任何属性有重复的值,它就不符合1NF。
·第二范式(2NF):如果实体符合第一范式,并且其所有的非标识属性都完全依赖于实体的唯一标识符,则称实

体符合第二范式。
·第三范式(3NF):实体符合2NF并且其所有的非标识属性均不依赖于其他任何非标识属性,则称这个实体符合

第三范式(3NF)。
·遇到违反3范式的问题时,识别新的实体,解决问题。
·逻辑数据建模的过程
1)标识并创建实体
2)标识并创建实体间的关系
3)标识并创建属性
4)为每个实体标识唯一标识符
5)标准化
注意:这个过程并非是线性的
物理数据库设计
1)实体成为物理数据库的表
2)属性成为物理数据库的列,为每列选择合适的数据类型
3)惟一标识符成为不允许为null值的列。在物理数据库中称为主键(primary key),也可以为标识符创建惟一

索引来强制惟一性。
4)关系被构建为外键。
·有重复的实体标示我们至少漏掉了一个其他实体,应该添加该实体,即添加新的表。
·实体规则:每个实体都必须具有一个唯一的标识符,称之为ID,ID满足一下规则
1)在实体的所有实例中是唯一的
2)在实体的每个实例的整个生命周期中都有非null值
3)在实例的整个生命周期中,它的值不会改变。
·标识符的选择是非常重要的,因为标识符也用来建立关系。如果在选择了实体的ID之后,发现它不能满足以上

的规则,就会影响到整个数据模型。
·标识符问题的解决办法是创建一个标识属性,它除了作为标识属性之外没有其它的意义。
·关系:由实体的标识符我们可以建立其关系,关系描述了两个实体的二元关联。关系中每个实体描述了另一个

实体,同时也被另一个实体所描述。关系的两端都包括两个部分:一个名和一个度。
·度:表示必须有多少实体实例才能描述一个被描述的实体实例,度使用两个不同的值表示:“一个且仅有一个

(1)”和“一个或多个(M),度要涉及到方向。
·如果任何属性不完全依赖于实体的惟一标识符,那么这个属性必定是放错了位置,必须去除。
·在实体建立关系时,重要的是确定关系的两个方向
·一对一关系非常少,事实上,如果你在数据库建模期间遇到了这样的关系,就因该仔细看一下你的设计。一对

一关系暗示着两个实体实际上是相同的,应该合为一个实体。
·多对多关系都需要解决,如通过连接实体转换为一对多关系,否则在将数据模型装换为物理模式时就会遇到问

题。
·一旦改进了数据模型就因该只有一对一关系和一对多关系,多对多关系已经通过连接表被转换了。需要通过为

关系所涉及的表添加外键来创建关系。外键是处在关系中另一端的惟一标识符或主键。最常见的关系是一对多关

系。这个关系通过把”一“方的主键置于”多”方的表中完成映射。

#事务
MySql起初不支持事务,现在提供了两种事务安全的表类型:BDB和InnoDB
事务会严重影响数据库的性能
事务隔离层:用于确定当你处于事务处理中时别人所看见的东西
脏读取:发生在一个事务观察另一个事务未提交的改变时,如果最初的事务回滚了它的改变,那么读取数据的事

务就被称为取得了“脏”数据。
重复读取:发生在一个事务始终用相同的查询读取相同的内容时,而不管查询进行了多少次,或者其它事务对第

一个事务所读取的行进行了多少次改变,换句话说,进行重复读取的事务没有看到其他事务所提交的改变。
幻影读取:发生在其它事务产生了一个新行,而这一行可以匹配你的事务的where子句,你的事务看到了另一个事

务未提交的改变。
MySQL支持下列事务隔离层:
serializable:事务只允许提交的重复读取。幻象读取不允许。
repeatable read:事务允许提交的重复读取和幻象读取。
read commited:事务不允许脏读取,但允许非重复的幻象读取
read uncommitted:事务允许脏读、非重复和幻象读取
serializable的事务隔离级最高,read uncommitted的事务隔离级最低。但事务隔离级越高,应用的性能就越低

,一般read commited的事务隔离级能够满足应用的要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值