数据库分库技巧

数据库分库技巧
数据库分库技巧

2009-07-03

数据库水平切分的实现原理解析---分库,分表,主从,集群,负载

均衡器

关键字: 水平切分,分库,分表,主从,集群

第1章引言

随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库,可以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失。通过负载均衡策略,有效的降低了单台机器的访问负载,降低了宕机的可能性;通过集群方案,解决了数据库宕机带来的单点数据库不能访问的问题;通过读写分离策略更是最大限度了提高了应用中读取(Read)数据的速度和并发量。目前国内的大型互联网应用中,大量的采用了这样的数据切分方案,Taobao,Alibaba,Tencent,它们大都实现了自己的分布式数据访问层(DDAL)。以实现方式和实现的层次来划分,大概分为两个层次(Java应用为例):JDBC层的封装,ORM框架层的实现。就JDBC层的直接封装而言,现在国内发展较好的一个项目是被称作“变形虫”(Amoeba)的项目,由阿里集团的研究院开发,现在仍然处于测试阶段(beta 版),其运行效率和生产时效性有待考究。就ORM框架层的实现而言,比如Taobao 的基于ibatis和Spring的的分布式数据访问层,已有多年的应用,运行效率和生产实效性得到了开发人员和用户的肯定。本文就是以ORM框架层为基础而实现的分布式数据访问层。本课题的难点在于分库后,路由规则的制定和选择以及后期的扩展性,比如:如何做到用最少的数据迁移量,达到扩充数据库容量(增加机器节点)的目的。核心问题将围绕数据库分库分表的路由规则和负载均衡策略展开。

第2章基本原理和概念

2.1基本原理:

人类认知问题的过程总是这样的:what(什么)-?why(为什么)-?how(怎么

做),接下来,本文将就这三个问题展开讨论和研究:

2.1.1什么是数据切分

"Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏中。"Sharding" 姑且称之为"分片"。Sharding 不是一门新技术,而是一个相对简朴的软件理念。众所周知,MySQL 5

之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。 Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。

通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由或者 table路由规则找到需要查询的具体的DB或者table,以进行Query操作。这里所说的“sharding”通常是指“水平切分”,这也是本文讨论的重点。具体将有什么样的切分方式呢和路由方式呢?行文至此,读者难免有所疑问,接下来举个简单的例子:我们针对一个Blog应用中的日志来说明,比如日志文章(article)表有如下字段:

面对这样的一个表,我们怎样切分呢?怎样将这样的数据分布到不同的数据库中的表中去呢?其实分析blog的应用,我们不难得出这样的结论:blog的应用中,用户分为两种:浏览者和blog的主人。浏览者浏览某个blog,实际上是在一个特定的用户的blog下进行浏览的,而blog的主人管理自己的blog,也同样是在特定的用户blog下进行操作的(在自己的空间下)。所谓的特定的用户,用数据库的字段表示就是“user_id”。就是这个“user_id”,它就是我们需要的分库的依据和规则的基础。我们可以这样做,将user_id为 1~10000的所有的文章信息放入DB1中的article表中,将user_id为10001~20000的所有文章信息放入DB2中的 article表中,以此类推,一直到DBn。这样一来,文章数据就很自然的被分到了各个数据库中,达到了数据切分的目的。接下来要解决的问题就是怎样找到具体的数据库呢?其实问题也是简单明显的,既然分库的时候我们用到了区分字段user_id,那么很自然,数据库路由的过程当然还是少不了 user_id的。考虑一下我们刚才呈现的blog应用,不管是访问别人的blog 还是管理自己的blog,总之我都要知道这个blog的用户是谁吧,也就是我们知道了这个blog的user_id,就利用这个user_id,利用分库时候的规则,反过来定位具体的数据库,比如user_id是234,利用该才的规则,就应该定位到DB1,假如user_id是12343,利用该才的规则,就应该定位到DB2。以此类推,利用分库的规则,反向的路由到具体的DB,这个过程我们称之为“DB路由”。

当然考虑到数据切分的DB设计必然是非常规,不正统的DB设计。那么什么样的DB设计是正统的DB设计呢?

我们平常规规矩矩用的基本都是。平常我们会自觉的按照范式来设计我们的数据库,负载高点可能考虑使用相关的Replication机制来提高读写的吞吐和性

能,这可能已经可以满足很多需求,但这套机制自身的缺陷还是比较显而易见的(下文会提及)。上面提到的“自觉的按照范式设计”。考虑到数据切分的DB 设计,将违背这个通常的规矩和约束,为了切分,我们不得不在数据库的表中出现冗余字段,用作区分字段或者叫做分库的标记字段,比如上面的article的例子中的user_id这样的字段(当然,刚才的例子并没有很好的体现出user_id

的冗余性,因为user_id这个字段即使就是不分库,也是要出现的,算是我们捡了便宜吧)。当然冗余字段的出现并不只是在分库的场景下才出现的,在很多大型应用中,冗余也是必须的,这个涉及到高效DB的设计,本文不再赘述。

2.1.2为什么要数据切分

上面对什么是数据切分做了个概要的描述和解释,读者可能会疑问,为什么需要数据切分呢?像 Oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的。试想一下一年几千万的使用费用和动辄上千万元的小型机作为硬件支撑,这是一般公司能支付的起的吗?即使就是能支付的起,假如有更好的方案,有更廉价且水平扩展性能更好的方案,我们为什么不选择呢?

但是,事情总是不尽人意。平常我们会自觉的按照范式来设计我们的数据库,负载高点可能考虑使用相关的Replication机制来提高读写的吞吐和性能,这可能已经可以满足很多需求,但这套机制自身的缺陷还是比较显而易见的。首先它的有效很依赖于读操作的比例,Master往往会成为瓶颈所在,写操作需要顺序排队来执行,过载的话Master首先扛不住,Slaves的数据同步的延迟也可能比较大,而且会大大耗费CPU的计算能力,因为write操作在Master上执行以后还是需要在每台slave机器上都跑一次。这时候 Sharding可能会成为鸡肋了。Replication搞不定,那么为什么Sharding可以工作呢?道理很简单,因为它可以很好的扩展。我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是横向扩展, 通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?Sharding可以轻松的将计算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。

综合以上因素,数据切分是很有必要的,且我们在此讨论的数据切分也是将MySql作为背景的。基于成本的考虑,很多公司也选择了Free且Open的MySql。对MySql有所了解的开发人员可能会知道,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案也是Sharding,也就是我们所说的数据切分方案。

我们用免费的MySQL和廉价的Server甚至是PC做集群,达到小型机+大型商业DB的效果,减少大量的资金投入,降低运营成本,何乐而不为呢?所以,我们选择Sharding,拥抱Sharding。

2.1.3怎么做到数据切分

说到数据切分,再次我们讲对数据切分的方法和形式进行比较详细的阐述和说明。

数据切分可以是物理上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。

数据切分也可以是数据库内的,对数据通过一系列的切分规则,将数据分布到一个数据库的不同表中,比如将article分为article_001,article_002等子表,若干个子表水平拼合有组成了逻辑上一个完整的article表,这样做的目的其实也是很简单的。举个例子说明,比如article表中现在有5000w条数据,此时我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的。但是反过来,假如我们将这个表分成100 个table呢,从article_001一直到article_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量。当然分表的好处还不知这些,还有诸如写操作的锁操作等,都会带来很多显然的好处。

综上,分库降低了单点机器的负载;分表,提高了数据操作的效率,尤其是Write操作的效率。行文至此我们依然没有涉及到如何切分的问题。接下来,我们将对切分规则进行详尽的阐述和说明。

上文中提到,要想做到数据的水平切分,在每一个表中都要有相冗余字符作为切分依据和标记字段,通常的应用中我们选用user_id作为区分字段,基于此就有如下三种分库的方式和规则:(当然还可以有其他的方式)

按号段分:

(1) user_id为区分,1~1000的对应DB1,1001~2000的对应DB2,以此类推;

优点:可部分迁移

缺点:数据分布不均

(2)hash取模分:

对user_id进行hash(或者如果user_id是数值型的话直接使用user_id 的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。

优点:数据分布均匀

缺点:数据迁移的时候麻烦,不能按照机器性能分摊数据

(3)在认证库中保存数据库配置

就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。

优点:灵活性强,一对一关系

缺点:每次查询之前都要多一次查询,性能大打折扣

以上就是通常的开发中我们选择的三种方式,有些复杂的项目中可能会混合使用这三种方式。通过上面的描述,我们对分库的规则也有了简单的认识和了解。当然还会有更好更完善的分库方式,还需要我们不断的探索和发现。

第3章本课题研究的基本轮廓

上面的文字,我们按照人类认知事物的规律,what?why?how这样的方式阐述了数据库切分的一些概念和意义以及对一些常规的切分规则做了概要的介绍。本课题所讨论的分布数据层并不仅仅如此,它是一个完整的数据层解决方案,它到底是什么样的呢?接下来的文字,我将详细阐述本研究课题的完整思想和实现方式。

分布式数据方案提供功能如下:

(1)提供分库规则和路由规则(RouteRule简称RR),将上面的说明中提到的三中切分规则直接内嵌入本系统,具体的嵌入方式在接下来的内容中进行详细的说明和论述;

(2)引入集群(Group)的概念,保证数据的高可用性;

(3)引入负载均衡策略(LoadBalancePolicy简称LB);

(4)引入集群节点可用性探测机制,对单点机器的可用性进行定时的侦测,以保证LB策略的正确实施,以确保系统的高度稳定性;

(5)引入读/写分离,提高数据的查询速度;

仅仅是分库分表的数据层设计也是不够完善的,当某个节点上的DB服务器出现了宕机的情况的时候,会是什么样的呢?是的,我们采用了数据库切分方案,也就是说有N太机器组成了一个完整的DB,如果有一台机器宕机的话,也仅仅是一个DB的N分之一的数据不能访问而已,这是我们能接受的,起码比切分之前的情况好很多了,总不至于整个DB都不能访问。一般的应用中,这样的机器故障导致的数据无法访问是可以接受的,假设我们的系统是一个高并发的电子商务网站呢?单节点机器宕机带来的经济损失是非常严重的。也就是说,现在我们这样的方案还是存在问题的,容错性能是经不起考验的。当然了,问题总是有解决方案的。我们引入集群的概念,在此我称之为Group,也就是每一个分库的节点我们引入多台机器,每台机器保存的数据是一样的,一般情况下这多台机器分摊负载,当出现宕机情况,负载均衡器将分配负载给这台宕机的机器。这样一来,

就解决了容错性的问题。所以我们引入了集群的概念,并将其内嵌入我们的框架中,成为框架的一部分。

如上图所示,整个数据层有Group1,Group2,Group3三个集群组成,这三个集群就是数据水平切分的结果,当然这三个集群也就组成了一个包含完整数据的DB。每一个Group包括1个Master(当然Master也可以是多个)和 N个Slave,这些Master和Slave的数据是一致的。比如Group1中的一个slave发生了宕机现象,那么还有两个slave是可以用的,这样的模型总是不会造成某部分数据不能访问的问题,除非整个 Group里的机器全部宕掉,但是考虑到这样的事情发生的概率非常小(除非是断电了,否则不易发生吧)。

在没有引入集群以前,我们的一次查询的过程大致如下:请求数据层,并传递必要的分库区分字段(通常情况下是user_id)?数据层根据区分字段Route 到具体的DB?在这个确定的DB内进行数据操作。这是没有引入集群的情况,当时引入集群会是什么样子的呢?看图一即可得知,我们的路由器上规则和策略其实只能路由到具体的Group,也就是只能路由到一个虚拟的Group,这个Group

并不是某个特定的物理服务器。接下来需要做的工作就是找到具体的物理的DB 服务器,以进行具体的数据操作。基于这个环节的需求,我们引入了负载均衡器的概念(LB)。负载均衡器的职责就是定位到一台具体的DB服务器。具体的规则如下:负载均衡器会分析当前sql的读写特性,如果是写操作或者是要求实时性很强的操作的话,直接将查询负载分到Master,如果是读操作则通过负载均衡策略分配一个Slave。我们的负载均衡器的主要研究放向也就是负载分发策略,通常情况下负载均衡包括随机负载均衡和加权负载均衡。随机负载均衡很好理解,就是从N个Slave中随机选取一个Slave。这样的随机负载均衡是不考虑机器性能的,它默认为每台机器的性能是一样的。假如真实的情况是这样的,这样做也是无可厚非的。假如实际情况并非如此呢?每个Slave的机器物理性能和配置不一样的情况,再使用随机的不考虑性能的负载均衡,是非常不科学的,这样一来会给机器性能差的机器带来不必要的高负载,甚至带来宕机的危险,同时高性能的数据库服务器也不能充分发挥其物理性能。基于此考虑从,我们引入了加权负载均衡,也就是在我们的系统内部通过一定的接口,可以给每台DB 服务器分配一个权值,然后再运行时LB根据权值在集群中的比重,分配一定比例的负载给该DB服务器。当然这样的概念的引入,无疑增大了系统的复杂性和可维护性。有得必有失,我们也没有办法逃过的。

有了分库,有了集群,有了负载均衡器,是不是就万事大吉了呢?事情远没有我们想象的那么简单。虽然有了这些东西,基本上能保证我们的数据层可以承受很大的压力,但是这样的设计并不能完全规避数据库宕机的危害。假如Group1中的slave2 宕机了,那么系统的LB并不能得知,这样的话其实是很危险的,因为LB不知道,它还会以为slave2为可用状态,所以还是会给slave2分配负载。这样一来,问题就出来了,客户端很自然的就会发生数据操作失败的错误或者异常。这样是非常不友好的!怎样解决这样的问题呢?我们引入集群节点的可用性探测机制,或者是可用性的数据推送机制。这两种机制有什么不同呢?首先说探测机制吧,顾名思义,探测即使,就是我的数据层客户端,不定时对集群中各个数据库进行可用性的尝试,实现原理就是尝试性链接,或者数据库端口的尝试性访问,都可以做到,当然也可以用JDBC尝试性链接,利用Java 的Exception机制进行可用性的判断,具体的会在后面的文字中提到。那数据推送机制又是什么呢?其实这个就要放在现实的应用场景中来讨论这个问题了,一般情况下应用的DB 数据库宕机的话我相信DBA肯定是知道的,这个时候DBA手动的将数据库的当前状态通过程序的方式推送到客户端,也就是分布式数据层的应用端,这个时候在更新一个本地的DB状态的列表。并告知LB,这个数据库节点不能使用,请不要给它分配负载。一个是主动的监听机制,一个是被动的被告知的机制。两者各有所长。但是都可以达到同样的效果。这样一来刚才假设的问题就不会发生了,即使就是发生了,那么发生的概率也会降到最低。

上面的文字中提到的Master和Slave,我们并没有做太多深入的讲解。如图一所示,一个Group由1个Master和N个Slave组成。为什么这么做呢?其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。在一般的互联网应用中,经过一些数据调查得出结论,读/写的比例大概在 10:1左右,也就是说大量的数据操作是集中在读的操作,这也就是为什么我们会有多个

Slave的原因。但是为什么要分离读和写呢?熟悉DB的研发人员都知道,写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作其其他的N

个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。读写分离也会引入新的问题,比如我的Master上的数据怎样和集群中其他的Slave机器保持数据的同步和一致呢?这个是我们不需要过多的关注的问题,MySql的Proxy机制可以帮助我们做到这点,由于Proxy机制与本课题相关性不是太强,

在这里不做详细介绍。

综上所述,本课题中所研究的分布式数据层的大体功能就是如此。以上是对基本原理的一些讨论和阐述。接下来就系统设计层面,进行深入的剖析和研究。

第4章系统设计

4.1系统实现层面的选择

在引言部分中提到,该系统的实现层面有两种选择,一种是基于JDBC层面上的选择,一种是基于现有数据持久层框架层面上的选择,比如Hibernate,ibatis。两种层面各有长处,也各有不足之处。基于JDBC层面上的系统实现,系统开发难度和后期的使用难度都将大大提高。大大增加了系统的开发费用和维护费用。本课题的定位是在成型的ibatis持久层框架的基础上进行上层的封装,而不是对ibatis源码的直接修改,这样一来使本系统不会对现有框架有太多的侵入性,从而也增加了使用的灵活性。之所以选择ibatis,原因如下:

(1)ibatis的学习成本非常低,熟练的Java Programmer可在非常的短时间内熟练使用ibatis;

(2)ibatis是轻量级的ORM,只是简单的完成了RO,OR的映射,其查询语句也是通过配置文件sql-map.xml文件在原生sql的层面进行简单的配置,也就是说我们没有引入诸如Hibernate那样的HQL的概念,从而增强了 sql的可控性,优秀的DBA可以很好的从sql的层面对sql进行优化,使数据层的应用有很强的可控性。Hibernate虽然很强大,但是由于 Hibernate是OR的一个重型封装,且引入HQL的概念,不便于DBA团队对sql语句的控制和性能的调优。

基于以上两点理由,本课题在ORM的产品的选择上选择了易学易用且轻量级的持久层框架ibatis。下面的讨论也都是特定于ibatis的基础上的讨论。

4.2其他开源框架的选择

在一些大型的Java应用中,我们通常会采用Spring这样的开源框架,尤其是 IoC(DI)这部分,有效的帮助开发人员管理对象的依赖关系和层次,降低系统各层次之间的实体耦合。Spring的优点和用处我相信这是开发人员众所周知的,在此不再赘述。本课题的数据层也将采用Spring做为IoC(DI)的框架。

4.3系统开发技术和工具介绍

开发语言:Java JDK1.5

集成开发环境:Eclipse 3.3.4

Web环境下测试服务器:JBoss 4.2

构建工具:淘宝自行研发的构建工具Antx(类似于Maven),当然也可以用Maven

依赖的开源Jar:Spring2.0,ibaits,commons-configuration(读取配置文件),log4j,junit等

第5章系统分析(待续。。)

软件工程-数据库设计规范与命名规则

数据库设计规范、技巧与命名规范 一、数据库设计过程 数据库技术是信息资源管理最有效的手段。 数据库设计是指:对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据, 满足用户信息要求和处理要求。 数据库设计的各阶段: A、需求分析阶段:综合各个用户的应用需求(现实世界的需求)。 B、在概念设计阶段:形成独立于机器和各DBMS产品的概念模式(信息世界模型),用E-R图来描述。 C、在逻辑设计阶段:将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。 然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。 D、在物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。 1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 需求分析的重点:调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 需求分析的方法:调查组织机构情况、各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。 常用的调查方法有:跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。 分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(Structured Analysis, 简称SA方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。 数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。 2. 概念结构设计阶段 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。 概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一 DBMS 支持的特定数据模型。 概念模型特点: (1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。 (2) 应该简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。 概念模型设计的一种常用方法为IDEF1X方法,它就是把实体-联系方法应用到语义数据模型中的一种语义模型化技术, 用于建立系统信息模型。 使用IDEF1X方法创建E-R模型的步骤如下所示:

数据库设计方法及

数据库设计方法及命名规范

- - 2 数据库设计方法、规范与技巧 (5) 一、数据库设计过程 (5) 1. 需求分析阶段 (6) 2. 概念结构设计阶段 (9) 2.1 第零步——初始化工程 (10) 2.2 第一步——定义实体 (10) 2.3 第二步——定义联系 (11) 2.4 第三步——定义码 (11) 2.5 第四步——定义属性 (12) 2.6 第五步——定义其他对象和规则 (12) 3. 逻辑结构设计阶段 (13) 4. 数据库物理设计阶段 (15) 5. 数据库实施阶段 (15) 6. 数据库运行和维护阶段 (16) 7.建模工具的使用 (16) 二、数据库设计技巧 (18) 1. 设计数据库之前(需求分析阶段) (18) 2. 表和字段的设计(数据库逻辑设计) (19) 1) 标准化和规范化 (19) 2) 数据驱动 (20)

- - 3 3) 考虑各种变化 (21) 4) 对地址和电话采用多个字段 (22) 5) 使用角色实体定义属于某类别的列 (22) 6) 选择数字类型和文本类型尽量充足 (23) 7) 增加删除标记字段 (24) 3. 选择键和索引(数据库逻辑设计) (24) 4. 数据完整性设计(数据库逻辑设计) (27) 1) 完整性实现机制: (27) 2) 用约束而非商务规则强制数据完整性 (27) 3) 强制指示完整性 (28) 4) 使用查找控制数据完整性 (28) 5) 采用视图 (28) 5. 其他设计技巧 (29) 1) 避免使用触发器 (29) 2) 使用常用英语(或者其他任何语言)而不 要使用编码 (29) 3) 保存常用信息 (29) 4) 包含版本机制 (30) 5) 编制文档 (30) 6) 测试、测试、反复测试 (31) 7) 检查设计 (31) 三、数据库命名规范 (31) 1. 实体(表)的命名 (31) 2. 属性(列)的命名 (34)

简易常用-Word文档使用技巧方法大全(超全)

Word文档使用技巧方法大全 Word2000、2003、2007、2010快捷键使用大全总结常用快捷键 快捷键作用 一、字体类 Ctrl+B 使字符变为粗体 Ctrl+I 使字符变为斜体 Ctrl+U 为字符添加下划线 Ctrl+Shift+D 双下划线 Ctrl+Shift+< 缩小字号 Ctrl+Shift+> 增大字号 Ctrl+] 逐磅增大字号 Ctrl+[ 逐磅减小字号 Ctrl+Shift+F 改变字体 Ctrl+Shift+P 改变字号 Ctrl+D 改变字符格式("格式"菜单中的"字体"命令) Shift+F3 切换字母大小写(一次首字母变成大写,两次单词变成大写) CTRL+SHIFT+A 将所选字母设为大写 二、格式类 Ctrl+Shift+C 复制格式 Ctrl+Shift+V 粘贴格式 Ctrl+1 单倍行距(1为主键盘的数字键)

Ctrl+2 双倍行距 Ctrl+5 1.5 倍行距 Ctrl+0 在段前添加一行间距 Shift+F1(单击)需查看文字格式了解其格式的文字 Ctrl+E 段落居中 Ctrl+J 两端对齐 Ctrl+L 左对齐 Ctrl+R 右对齐 Ctrl+Shift+J 分散对齐 Ctrl+M 左侧段落缩进 Ctrl+Shift+M 取消左侧段落缩进 Ctrl+T 创建悬挂缩进 Ctrl+Shift+T 减小悬挂缩进量 Ctrl+Shift+S 应用样式 Ctrl+Shift+N 应用"正文"样式 Alt+Ctrl+1 应用"标题1"样式 Alt+Ctrl+2 应用"标题2"样式 Alt+Ctrl+3 应用"标题3"样式 三、编辑和文字移动 Backspace 删除左侧的一个字符 Ctrl+Backspace 删除左侧的一个单词 Delete 删除右侧的一个字符 Ctrl+Delete 删除右侧的一个单词 F2(然后移动插入移动选取的文字或图形点并按Enter键)

数据库设计方法、规范与技巧

数据库设计方法、规范与技巧 一、数据库设计过程 数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。 数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。 1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 需求分析的方法:调查组织机构情况、调查各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。 常用的调查方法有:跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。 分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(Structured Analysis,简称SA方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。 数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。 数据字典是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(至少应该包含每个字段的数据类型和在每个表内的主外键)。 数据项描述={数据项名,数据项含义说明,别名,数据类型,长度, 取值范围,取值含义,与其他数据项的逻辑关系} 数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}} 数据流描述={数据流名,说明,数据流来源,数据流去向, 组成:{数据结构},平均流量,高峰期流量} 数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流, 组成:{数据结构},数据量,存取方式} 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流}, 处理:{简要说明}} 2. 概念结构设计阶段 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。 概念模型特点: (1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。 (2) 应该简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。 概念模型设计的一种常用方法为IDEF1X方法,它就是把实体-联系方法应用到语义数据模型中的一种语义模型化技术,用于建立系统信息模型。 使用IDEF1X方法创建E-R模型的步骤如下所示: 2.1 第零步——初始化工程

word使用技巧大全

1 常用快捷键 Ctrl+C 复制所选文本或对象 Ctrl+C连续2次调出剪切板 Ctrl+X 剪切所选文本或对象 Ctrl+V 粘贴文本或对象 Ctrl+] 逐磅增大字号 Ctrl+[ 逐磅减小字号 Shift+Enter 换行符 Ctrl+Enter 分页符 Ctrl+A 包含整篇文档 F1 显示当前程序或者winodws的帮助内容。 F2 选中一个文件“重命名” F3 在桌面时打开“查找:所有文件”对话框 ALT+TAB 切换当前程序 ALT+ESC 切换当前程序 PRINTSCREEN 将当前屏幕以图象方式拷贝到剪贴板ALT+PRINTSCREEN 将当前活动程序窗口以图象方式拷贝到剪贴板 winodws键或CTRL+ESC 打开开始菜单 Windows徽标键+TAB键在任务栏上的按钮间循环 Windows徽标键+E键启动“我的电脑” Windows徽标键+D键快速显示桌面 Windows徽标键+R键执行“运行”命令 Windows徽标键+F键搜索文件或者文件夹 Windows徽标键+F1键显示Windows帮助 Windows徽标+PRINTSCREEN 将屏幕复制到剪贴板(包括鼠标光标)Windows徽标+SCROLLLOCK 将屏幕复制到剪贴板(不包括鼠标光标)

2 图形技巧 2.1 绘制图形的技巧 2.1.1 画直线 画直线的同时按着Shift键,将可以画出15°、30°、45°、60°、75°等具有特殊角度的直线。按住Ctrl键可画出自中间向两侧延伸的直线,同时按住这两个键则可画出自中间向两侧延伸的具有特殊角度的直线。 2.1.2 画弧 按住Shift键的同时可画出45度圆弧(画圆弧方法:打开绘图工具栏,单击“自选图形/基本形状/弧形”),按住Ctrl键可画出自中间向两侧延伸的圆弧,同时按住这两个键则可画出自中间向两侧延伸的45°圆弧,按住Alt键可画出一端固定的圆弧,同时按住Ctrl和Alt键则可画出一端固定的45°圆弧。 2.1.3 画矩形 按住Shift键可绘制出一个特殊的矩形——正方形,按住Ctrl键可绘出自中间向四周延伸的矩形,同时按住这两个键则可画出自中间向四周延伸的正方形。画圆时与此类似。 由此可见结合键盘画图的奇妙效果。 2.2 选择图形的技巧 如果需要选择部分图形,则可在按住Shift键的同时依次进行选择或单击绘图工具栏上的“选择对象”按钮,然后用鼠标画出一个框将所需要的图形罩住即可。 如果是各图形层叠在一起的情况,则可以首先选中最上面的图形,然后按Tab键或“Shift+Tab”组合键依次选择即可。 小提示:如果你发现某图形选择起来很困难(鼠标变不成十字形状),这种情况常发生在多个图形混杂在一起的情况,同样点击“选择对象”按钮后你会发现选择很容易。

规范和设计技巧在数据库设计的探讨

规范和设计技巧在数据库设计的探讨 摘要医院的信息收集工作在信息化产业中属于非常关键的构成部分,而且这方面的工作水平,能够对医院数据收集的水平起到决定性的作用,而想要做好这方面的工作,就一定要创建完善的数据库,并对其进行完美的规范和设计。具体的讨论一下数据库设计规范化的意义,信息收集的基本要求和存有的缺陷及设计的主要阶段中需要注意的技巧等问题。 关键词企业信息收集工作;数据库设计;信息化 目前,怎样让信息收集工作的质量得到增强,成为了医院发展过程中的一项重要工作。而且随着我国市场化发展的进步,医院的数据库设计也迎来了全新的发展时代,现如今数据收集的复杂化、智能化的实现,是这项工作取得进步的最好证明。该就以企业信息收集的意义为角度,来具体地讨论一下如何对数据库进行规范化的设计。 1数据库设计工作的规范化

在医院信息收集工作中的意义医院在对信息收集的时候,一定要 确保数据能够具有较高的质量,同时还要确保收集的高效率。医院若 想在竞争激烈的环境中保持一定的竞争力,就必须要做好信息收集工作,这样才能够跟得上时代发展的脚步,同时也是医院能够得到持续 发展的重要一步。随着我国现代化水平的提升,信息产业也迎来了发 展机遇。特别是医院的信息收集工作,它独特的信息化特点已经成为 了医院发展的重要构成部分。医院若想完成信息化建设,就一定要和 信息收集工作相结合,如此一来,就可以很大水准地提升工作效率, 而且也能够为长远发展打下一个坚实的基础。另外,数据库设计质量 如何,更是能够决定医院信息化发展的水准,确保数据库设计的质量,可以作信息化建设工作更加的具有意义。不过现在,很多医院在信息 收集工作方面是存有很大的问题,不仅没有体现出其应该具备的效果,而且还对医院的各方面工作造成了一定的影响,影响了医院信息化发展。而之所以会出现这方面的问题,主要的原因在于数据库设计人员 的能力有限。医院之所以开展数据库设计,主要是想让医院能够找到 更多的数据搜索方式,不过这也因此增加了数据库设计工作的难度, 从而让医院的相关工作人员在梳理信息收集工作和信息化建设这两者 的关系上显得并不合理。 怎样以最快的速度让医院获得更加方便的数据收集方式,成为了 相关工作人员急需到的重要工作项目。医院信息收集工作本身具有统 一性,而且所有部分的工作都存有着一定的联系,对于所有医院工作 人员来说,必须要准确的掌握好数据收集工作和信息化建设的关系, 数据库设计工作才能够取得进步。医院的相关负责人若想通过磋商的 办法来解决收集工作和信息化之间的关系,那么就一定要创建出一套 合理的数据库设计规范制度。医院的数据库设计工作在信息化建设中 占据着重要的位置,而从信息收集的角度考虑的话,增强数据库的建设,可以充分展现出其智能化、高效化的重要举措。而且也意味着在

WORD使用技巧大全(史上最强哦)

1.问:WORD里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉。文件——页面设置——版式——页眉和页脚——首页不同 2.问:请问word中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了?答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来了 3.问:如何合并两个WORD文档,不同的页眉需要先写两个文件,然后合并,如何做?答:页眉设置中,选择奇偶页不同/与前不同等选项 4.问:WORD编辑页眉设置,如何实现奇偶页不同? 比如:单页浙江大学学位论文,这一个容易设;双页:(每章标题),这一个有什么技巧啊?答:插入节分隔符,与前节设置相同去掉,再设置奇偶页不同 5.问:怎样使WORD文档只有第一页没有页眉,页脚?答:页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”——“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。 6.问:如何从第三页起设置页眉?答:在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了

●在新建文档中,菜单—视图—页脚—插入页码—页码格式—起始页码为0,确定; ●菜单—文件—页面设置—版式—首页不同,确定; ●将光标放到第一页末,菜单—文件—页面设置—版式—首页不同—应用于插入点之后,确定。第2步与第三步差别在于第2步应用于整篇文档,第3步应用于插入点之后。这样,做两次首页不同以后,页码从第三页开始从1编号,完成。 7.问:WORD页眉自动出现一根直线,请问怎么处理?答:格式从“页眉”改为“清除格式”,就在“格式”快捷工具栏最左边;选中页眉文字和箭头,格式-边框和底纹-设置选无 8.问:页眉一般是---------,上面写上题目或者其它,想做的是把这根线变为双线,WORD中修改页眉的那根线怎么改成双线的?答:按以下步骤操作去做: ●选中页眉的文字,包括最后面的箭头 ●格式-边框和底纹 ●选线性为双线的 ●在预览里,点击左下小方块,预览的图形会出现双线 ●确定▲上面和下面自己可以设置,点击在预览周围的四个小方块,页眉线就可以在不同的位置

VFP数据库的基本操作习题

1.在Visual FoxPro的命令窗口中输入CREATE DATA命令以后,屏幕会出现一个创建对 话框,要想完成同样的工作,还可以采取如下步骤( )。 A)单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“数据库”单选按钮,再单击“新建文件”命令按钮 B)单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“数据库”单选按钮,再单击“向导”命令按钮 C)单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“表”单选按钮,再单击“新建文件”命令按钮 D)单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“表”单选按钮,再单击“向导”命令按钮 2.一个数据库名student,要想打开数据库,应使用命令()。 A)OPEN student B)OPEN DATA student C)USE DATA student D)USE student 3.在使用USE命令打开表文件时,能够同时自动打开一个相关的()。 A)备注文件B)文本文件C)内存变量文件D)屏幕格式文件 4.删除数据库表中的记录有()方式。 A)1种B)2种C)3种D)4种 5.如果需要给当前表末尾增加一个空白记录,应使用的命令是()。 A)APPEND B)APPEND BLANK C)INSERT D)EDIT 6.要从表中物理删除一条记录,应使用命令()。 A)首先用DELETE命令,然后用ZAP命令 B)直接用ZAP命令 C)首先用DELETE命令,然后用PACK命令 D)直接用DElETE命令 7.要彻底删除表中的所有记录,可以使用命令( )。 A)PPEND B)DELETE C)ZAP D)RECALL 8.用命令REPLACE修改记录的特点是()。 A)边查阅边修改B)数据表之间自动更新 c)成批自动替换D)按给定条件顺序修改更新 9.职工数据表中有D型字段“出生日期”,苦要显示职工生日的月份和日 期,应当使用命令()。 A)?姓名+MONTH(出生日期)+”月”+DAY(出生日期)+“日” B)?姓名+STR(MONTH(出生日期)+”月”+DAY(出生日期))+”日” c)?姓名+SUBSTR(MONTH(出生日期))+”月”+SUBSTR(DAY(出生日期)) +”日“ D)?姓名+STR(MONTH(出生日期),2)+”月”+STR(DAY(出生日期),2) +”日” 10.在以下各命令序列中总能实现插入一条空记录并使其成为第八条记录的是()。 A)SKIP 7 B)GOTO 7 INSERT BLANK INSERT BLANK C)LOCATE FOR RECNO( )=8 D)GOTO 7 INSERT BLANK INSERT BIlANK BEFORE

数据库设计规范和值得注意的问题

如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据 库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的 老师也比不过经验的教诲。所以我们最近找了些对数据库设计颇有造诣的专业人士给大家传授一些设 计数据库的技巧和经验。我们的编辑从收到的个反馈中精选了其中的个最佳技巧,并把这些 技巧编写成了本文,为了方便索引其内容划分为个部分: 第部分—设计数据库之前 这一部分罗列了个基本技巧,包括命名规范和明确业务需求等。 第部分—设计数据库表 总共个指南性技巧,涵盖表内字段设计以及应该避免的常见问题等。 第部分—选择键 怎么选择键呢?这里有个技巧专门涉及系统生成的主键的正确用法,还有何时以及如何索引字段 以获得最佳性能等。 第部分—保证数据完整性 讨论如何保持数据库的清晰和健壮,如何把有害数据降低到最小程度。 第部分—各种小技巧 不包括在以上个部分中的其他技巧,五花八门,有了它们希望你的数据库开发工作会更轻松一些。 第部分—设计数据库之前 . 考察现有环境 在设计一个新数据库时,你不但应该仔细研究业务需求而且还要考察现有的系统。大多数数据库 项目都不是从头开始建立的;通常,机构内总会存在用来满足特定需求的现有系统(可能没有实 现自动计算)。显然,现有系统并不完美,否则你就不必再建立新系统了。但是对旧系统的研究 可以让你发现一些可能会忽略的细微问题。一般来说,考察现有系统对你绝对有好处。 — 我曾经接手过一个为地区运输公司开发的数据库项目,活不难,用的是数据库。我设置 了一些项目设计参数,而且同客户一道对这些参数进行了评估,事先还查看了开发环境下所采取 的工作模式,等到最后部署应用的时候,只见终端上出了几个提示符然后立马在我面前翘辫子 了!抓耳挠腮的折腾了好几个小时,我才意识到,原来这家公司的网络上跑着两个数据库应用, 而对网络的访问需要明确和严格的用户帐号及其访问权限。明白了这一点,问题迎刃而解:只需 采用客户的系统即可。这个项目给我的教训就是:记住,假如你在诸如或者这 类公共环境下开发应用程序,一定要从表面下手深入系统内部搞清楚你面临的环境到底是怎

Word使用技巧汇编

word使用技巧汇编 1、Word表格自动填充 在Word表格里选中要填入相同内容的单元格,单击“格式→项目符号和编号”,进入“编号”选项卡,选择任意一种样式,单击“自定义”按钮,在“自定义编号列表”窗口中“编号格式”栏内输入要填充的内容,在“编号样式”栏内选择“无”,依次单击“确定”退出后即可。 2、Word中巧输星期 单击“格式→项目符号和编号”,进入“编号”选项卡,单击“自定义”按钮,在“编号样式”栏内选择“一、二、三”等样式,在“编号格式”栏内的“一”前输入“星期”即可。 3、粘贴网页内容 在Word中粘贴网页,只须在网页中复制内容,切换到Word中,单击“粘贴”按钮,网页中所有内容就会原样复制到Word中,这时在复制内容的右下角会出现一个“粘贴选项”按钮,单击按钮右侧的黑三角符号,弹出一个菜单,选择“仅保留文本”即可。 4、快速转换大写金额 在Word中输入12345,选中,然后点击“插入→数字”命令,在弹出的“数字”对话框“数字类型”栏里选择中文数字版式“壹、贰、叁…”单击“确定”,则12345就变成中文数字“壹万贰仟叁佰肆拾伍”。 5、去掉自动编号功能

点击“工具→自动更正选项”,打开“自动更正”对话框,进入“键入时自动套用格式”选项卡,找到“键入时自动应用”组中的“自动编号列表”复选项,取消前面的钩即可。这样就可以去掉那些“烦心”的自动编号功能。同样也可去除“画布”,方法是:点击“工具→选项”,进入“常规”选项卡,去除“插入‘自选图形’时自动创建绘图画布”复选框上的钩即可。 6、画出不打折的直线 在Word中如果想画水平、垂直或“15度;、30度、45度;、75度”角的直线,只须在固定一个端点后,按住Shift键,上下拖动鼠标,将会出现上述几种直线选择,位置调整合适后松开Shift键即可。 7、加减乘除松输入 i和I在中文输入法智能ABC中有着特殊的意义,它们可以作为输入小写和大写中文数字的前导字符,还可以用来将数字运算符号变为相应的汉字,在i或I后面输入+、—、*、/,按回车键或空格键,即可得到与之对应的汉字加、减、乘、除。 8、部分加粗表格线 在Word中需要加粗某一条或几条表格线时,可以先在工具栏选项中点击“表格和边框”按钮,然后在“表格和边框”窗口选定“线型”与“线宽”,再点击“绘制表格”按钮,最后在欲加粗的表格线上从头到尾画上一笔即可。 9、打造整齐的Word公式 使用Word公式编辑器创建公式后,你如果感到其中的公式不整齐(特别是矩阵形式的公式),那么你可以通过下列方式进行微调:单击该公式,右键进入“设置对象格式”,选择“版式”中任意一种形式,单击“确定”,再选中需要调整的项;按下Ctrl键后,利用光标上下左右移动对该项进行微调;重复上下左右移动对该项进行微调;重复上述

数据库设计规范

数据库设计规范 一、数据库设计过程 数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。 数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个dbms产品的概念模式(信息世界模型),用e-r图来描述。在逻辑设计阶段将e-r图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(view)形成数据的外模式。在物理设计阶段根据dbms特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。 1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 需求分析的方法:调查组织机构情况、调查各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。 常用的调查方法有:跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。 分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(structured analysis,简称sa方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。 数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(data dictionary,简称dd)来描述。 数据字典是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(至少应该包含每个字段的数据类型和在每个表内的主外键)。 数据项描述={数据项名,数据项含义说明,别名,数据类型,长度, 取值范围,取值含义,与其他数据项的逻辑关系} 数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}} 数据流描述={数据流名,说明,数据流来源,数据流去向, 组成:{数据结构},平均流量,高峰期流量} 数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流, 组成:{数据结构},数据量,存取方式} 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流}, 处理:{简要说明}}

数据库设计的技巧和规范

数据库设计的技巧和规范 第1 部分- 设计数据库之前 1、调研客户的工作环境或研究已有的系统 在设计一个新数据库时,你不但应该仔细研究业务需求而且还要考察现有的系统。大多数数据库项目都不是从头开始建立的;通常,机构内总会存在用来满足特定需求的现有系统(可能没有实现自动计算)。显然,现有系统并不完美,否则你就不必再建立新系统了。但是对旧系统的研究可以让你发现一些可能会忽略的细微问题。一般来说,考察现有系统对你绝对有好处。 2、定义标准的对象命名规范 一定要定义数据库对象的命名规范。对数据库表来说,可给表的别名定义简单规则,可用项目缩写来给表名打前缀,如cjgl_S。表内的列[字段]要针对键采用一整套设计规则。比如,如果字段是数字类型,你可以用_n作为后缀;如果是字符类型则可以采用_c后缀。对列[字段]名应该采用标准的前缀和后缀。再如,假如你的表里有好多“money”字段,你不妨给每个列[字段]增加一个_m 后缀。还有,日期列[字段]最好以d_作为名字打头。 3、在物理实践之前进行逻辑设计 在深入物理设计之前要先进行逻辑设计。随着大量的case 工具不断涌现出来,你的设计也可以达到相当高的逻辑水准,你通常可以从整体上更好地了解数据库设计所需要的方方面面。 4、理解客户需求 在你百分百地确定系统从客户角度满足其需求之前不要在你的ER(实体关系)模式中加入哪怕一个数据表。了解你的用户的业务需求可以在以后的开发阶段节约大量的时间。一旦你明确了业务需求,你就可以自己做出许多决策了。

一旦你认为你已经明确了业务内容,你最好同客户进行一次系统的交流。采用客户的术语并且向他们解释你所想到的和你所听到的。同时还应该用可能、将会和必须等词汇表达出系统的关系基数。这样你就可以让你的客户纠正你自己的理解然后做好下一步的ER设计。 看起来这应该是显而易见的事,但需求就是来自客户(这里要从内部和外部客户的角度考虑)。不要依赖用户写下来的需求,真正的需求在客户的脑袋里。你要让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。一个不变的真理是:“只有我看见了我才知道我想要的是什么”必然会导致大量的返工,因为数据库没有达到客户从来没有写下来的需求标准。而更糟的是你对他们需求的解释只属于你自己,而且可能是完全错误的。 5、创建数据字典和ER图 一定要花点时间创建ER图和数据字典。其中至少应该包含每个字段的数据类型和在每个表内的主外键。创建ER图和数据字典确实有点费时但对其他开发人员要了解整个设计却是完全必要的。越早创建越能有助于避免今后面临的可能混乱,从而可以让任何了解数据库的人都明确如何从数据库中获得数据。 有一份诸如ER图等最新文档其重要性如何强调都不过分,这对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对以后设计SQL语句来说这是完全必要的。 6、创建模式 一张图表胜过千言万语:开发人员不仅要阅读和实现它,而且还要用它来帮助自己和用户对话。模式有助于提高协作效能,这样在先期的数据库设计中几乎不可能出现大的问题。模式不必弄的很复杂;甚至可以简单到手写在一张纸上就可以了。只是要保证其上的逻辑关系今后能产生效益。

word中80个常见的操作技巧(很强大哦)

答:格式从“页眉”改为“清除格式”,就在“格式”快捷工具栏最左边;选 中页眉文字和箭头,格式-边框和底纹-设置选无 8. 问:页眉一般是---------,上面写上题目或者其它,想做的是把这根线变 为双线,WORD 中修改页眉的那根线怎么改成双线的? 答:按以下步骤操作去做: ●选中页眉的文字,包括最后面的箭头●格式-边框和底纹●选线性为双线的 ●在预览里,点击左下小方块,预览的图形会出现双线●确定▲上面和下面自 己可以设置,点击在预览周围的四个小方块,页眉线就可以在不同的位置 9. 问:Word 中的脚注如何删除?把正文相应的符号删除,内容可以删除,但 最后那个格式还在,应该怎么办? 答:步骤如下:1、切换到普通视图,菜单中“视图”――“脚注”,这时最 下方出现了尾注的编辑栏。2、在尾注的下拉菜单中选择“尾注分隔符”,这 时那条短横线出现了,选中它,删除。3、再在下拉菜单中选择“尾注延续分 隔符”,这是那条长横线出现了,选中它,删除。4、切换回到页面视图。尾 注和脚注应该都是一样的 10. 问:Word 里面有没有自动断词得功能?常常有得单词太长了,如果能设置 下自动断词就好了 答:在工具―语言―断字―自动断字,勾上,word 还是很强大的 11. 问:如何将word 文档里的繁体字改为简化字? 答:工具―语言―中文简繁转换 12. 问:怎样微调WORD 表格线?WORD 表格上下竖线不能对齐,用鼠标拖动其 中一条线,可是一拖就跑老远,想微调表格竖线让上下对齐,请问该怎么办 答:选定上下两个单元格,然后指定其宽度就可以对齐了,再怎么拉都行press"Alt",打开绘图,其中有个调整坐标线,单击,将其中水平间距与垂直

《数据库设计规范》(参考Word)

神州泰岳 数据库设计规范 北京神州泰岳软件股份有限公司2010年11月11日

文档属性 文档变更 文档送呈

目录 1 前言 (6) 2 数据库的设计方法及流程 (7) 2.1 设计方法 (7) 2.2 设计流程 (8) 2.2.1 需求分析阶段 (8) 2.2.2 概念结构设计阶段 (9) 2.2.3 逻辑设计阶段 (9) 2.2.4 物理设计阶段 (9) 2.2.5 数据库实施阶段 (10) 2.2.6 数据库运行维护阶段 (10) 2.2.7 建模工具 (10) 3 数据库设计规范 (11) 3.1 数据库规范化的五个要求 (11) 3.1.1 要求一:表中应该避免可为空的列 (11) 3.1.2 要求二:表不应该有重复的值或者列 (11) 3.1.3 要求三:表中记录应该有一个唯一的标识符 (12) 3.1.4 要求四:数据库对象要有统一的前缀名 (12) 3.1.5 要求五:尽量只存储单一实体类型的数据 (12) 3.2 对象命名规范 (13) 3.2.1 规则 (13) 3.2.2 表命名规范 (14) 3.2.3 字段命名规范 (14) 3.2.4 索引命名规范 (15) 3.2.5 分区命名规范 (16) 3.2.6 视图/物化视图命名规范 (16) 3.2.7 触发器/函数/存储过程命名规范 (17) 3.3 数据库编程规范 (17) 3.3.1 书写规范 (17)

3.3.2 注释规范 (20) 3.3.3 语法规范 (23) 3.3.4 SQL性能规范 (26) 3.3.5 JOB使用规范 (34) 3.4 索引使用规范 (34) 3.4.1 创建索引原则 (34) 3.4.2 索引使用建议 (35) 3.4.3 总结 (40) 3.5 分区表使用规范 (40) 3.6 物理设计规范 (41) 3.6.1 环境配置 (41) 3.6.2 数据库配置 (41) 3.6.3 其他参数配置 (42) 3.6.4 控制文件 (42) 3.6.5 日志文件 (43) 3.6.6 表空间及数据文件设计原则 (43) 4 数据库安全规范 (45) 4.1 用户密码规范 (45) 4.2 用户权限规范 (48) 4.2.1 不同应用分配不同帐号 (48) 4.2.2 删除或锁定无关帐号 (48) 4.2.3 限制SYSDBA远程登录 (48) 4.2.4 限制业务用户权限 (48) 4.2.5 对用户的属性进行控制, (48) 4.2.6 启用数据字典保护 (48) 4.3 数据库监听规范 (49) 4.3.1 需要时为监听设置密码 (49) 4.3.2 需要时设置信任IP集 (49) 5 数据库评审 (50)

数据库与表的基本操作

第四章数据库与表的基本操作 实验4-1 数据库及表的操作 (一)实验目的 1.掌握创建数据库的基本操作方法。 2.熟练掌握创建表结构和输入记录的操作方法。 3.熟练掌握修改表结构、浏览和修改表记录数据的操作。 4.熟练掌握建立索引的操作。 5.掌握创建表间联系的操作。 (二)实验内容及步骤 1.创建数据库 【实例4-1】在实验2-1所建立的“教学管理.pjx”项目中,创建一个“学生成绩.dbc”数据库。 操作步骤如下: (1)打开“教学管理.pjx”项目。 (2)在“项目管理器”窗口中,选择“数据库”,然后单击“新建”按钮,打开“新建数据库”对话框,单击其中的“新建数据库”按钮,打开“创建”对话框,如图4-1所示。 图4-1“创建”对话框 (3)在“保存在”文本框中,选择保存数据库的文件夹“程序VX”;在“数据库名”文本框中,输入数据库名称“学生成绩”。 (4)单击“保存”按钮,即在指定位置建立一个“学生成绩.dbc”数据库文件。 此时,在VFP主窗口中弹出一个“数据库设计器”窗口,同时还激活了“数据库设计器”工具栏,如图4-2所示。

18 数据库应用学习与实训指导 图4-2“数据库设计器”窗口 2.创建数据表 【实例4-2】在“教学管理.pjx”项目中,创建学生表(Student.dbf)、成绩表(Grade.dbf)、课程表(Course.dbf)、授课表(Teach.dbf)和教师表(Teacher.dbf)。各个表的结构和数据记录如图4-3、图4-4、图4-5、图4-6、图4-7、图4-8、图4-9、图4-10、图4-11和图4-12所示。 图4-3学生表(Student.dbf)的结构 图4-4学生表(Student.dbf)的记录浏览窗口

word操作小技巧,很实用的

问:WORD里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉。文件——页面设置——版式——页眉和页脚——首页不同 问:请问word中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了? 答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来了 问:如何合并两个WORD文档,不同的页眉需要先写两个文件,然后合并,如何做? 答:页眉设置中,选择奇偶页不同/与前不同等选项 问:WORD编辑页眉设置,如何实现奇偶页不同?比如:单页浙江大学学位论文,这一个容易设;双页:(每章标题),这一个有什么技巧啊? 答:插入节分隔符,与前节设置相同去掉,再设置奇偶页不同 问:怎样使WORD文档只有第一页没有页眉,页脚? 答:页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”——“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。 问:如何从第三页起设置页眉? 答:在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了 ●在新建文档中,菜单—视图—页脚—插入页码—页码格式—起始页码为0,确定; ●菜单—文件—页面设置—版式—首页不同,确定; ●将光标放到第一页末,菜单—文件—页面设置—版式—首页不同—应用于插入点之后,确定。 第2步与第三步差别在于第2步应用于整篇文档,第3步应用于插入点之后。这样,做两次首页不同以后,页码从第三页开始从1编号,完成。 问:WORD页眉自动出现一根直线,请问怎么处理?

数据库设计规范化的五个要求

数据库设计规范化的五个要求 通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的。当然这是两个泛泛而谈的指标。为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求。 要求一:表中应该避免可为空的列。 虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时候,需要进行特殊的处理。如此的话,就会增加数据库处理记录的复杂性。当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多。 所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免。若确实需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据库性能的影响降低到最少。 一是通过设置默认值的形式,来避免空字段的产生。如在一个人事管理系统中,有时候身份证号码字段可能允许为空。因为不是每个人都可以记住自己的身份证号码。而在员工报到的时候,可能身份证没有带在身边。所以,身份证号码字段往往不能及时提供。为此,身份证号码字段可以允许为空,以满足这些特殊情况的需要。但是,在数据库设计的时候,则可以做一些处理。如当用户没有输入内容的时候,则把这个字段的默认值设置为0或者为N/A。以避免空字段的产生。 二是若一张表中,允许为空的列比较多,接近表全部列数的三分之一。而且,这些列在大部分情况下,都是可有可无的。若数据库管理员遇到这种情况,笔者建议另外建立一张副表,以保存这些列。然后通过关键字把主表跟这张副表关联起来。将数据存储在两个独立的表中使得主表的设计更为简单,同时也能够满足存储空值信息的需要。 要求二:表不应该有重复的值或者列。 如现在有一个进销存管理系统,这个系统中有一张产品基本信息表中。这个产品开发有时候可以是一个人完成,而有时候又需要多个人合作才能够完成。所以,在产品基本信息表产品开发者这个字段中,有时候可能需要填入多个开发者的名字。 如进销存管理中,还需要对客户的联系人进行管理。有时候,企业可能只知道客户一个采购员的姓名。但是在必要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共同进行管理。因为在订单上,可能需要填入采购代表的名字;可是在出货单上,则需要填入仓库管理人员的名字等等。 为了解决这个问题,有多种实现方式。但是,若设计不合理的话在,则会导致重复的值或者列。如我们也可以这么设计,把客户信息、联系人都放入同一张表中。为了解决多个联系人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等。若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。 可是这么设计的话,会产生一系列的问题。如客户的采购员流动性比较大,在一年内换了六个采购员。此时,在系统中该如何管理呢?难道就建立六个联系人字段?这不但会导致空字段的增加,还需要频繁的更改数据库表结构。明显,这么做是不合理的。也有人说,可以

数据库设计各阶段

1.数据库应用系统的设计步骤 按规范设计的方法可将数据库设计分为以下六个阶段 (1)需求分析; (2)概念结构设计; (3)逻辑结构设计; (4)数据库物理设计; (5)数据库实施; (6)数据库运行和维护。 2.需求分析 需求收集和分析是数据库应用系统设计的第一阶段。明确地把它作为数据库应用系统设计的第一步是十分重要的。这一阶段收集到的基础数据和一组数据流图(DataFlowDiaˉgram———DFD)是下一步设计概念结构的基础。概念结构对整个数据库设计具有深刻影响。 而要设计好概念结构,就必须在需求分析阶段用系统的观点来考虑问题、收集和分析数据及其处理。如何分析和表达用户需求呢?在众多的分析方法中,结构化分析(StructuredAnalysis,简称SA方法)是一个简单实用的方法。SA方法用自顶向下、逐层分解的方式分析系统。用数据流图,数据字典描述系统。然后把一个处理功能的具体内容分解为若干子功能,每个子功能继续分解,直到把系统的工作过程表达清楚为止。在处理功能逐步分解的同时,它们所用的数据也逐级分解。形成若干层次的数据流图。数据流图表达了数据和处理过程的关系。处理过程的处理逻辑常常用判定表或判定树来描述。数据字典(DataDictionary,简称DD)则是对系统中数据的详尽描述,是各类数据属性的清单。对数据库应用系统设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。数据字典是各类数据描述的集合,它通常包括以下5个部分: (1)数据项,是数据最小单位。

(2)数据结构,是若干数据项有意义的集合。 (3)数据流,可以是数据项,也可以是数据结构。表示某一处理过程的输入输出。 (4)数据存储,处理过程中存取的数据。常常是手工凭证、手工文档或计算机文件。 (5)处理过程。 3."概念结构设计 如同软件工程中重视需求分析与规范说明的思想一样,数据库设计中同样十分重视数据分析、抽象与概念结构的设计。概念结构的设计,是整个数据库设计的关键之 一。"概念结构独立于数据库逻辑结构,独立于支持数据库的DBMS,也独立于具体计算机软件和硬件系统。归纳总结,其主要特点是: (1)能充分地反映现实世界,包括实体和实体之间的联系,能满足用户对数据处理的要求,是现实世界的一个真实的模型,或接近真实的模型。 (2)易于理解,从而可以和不熟悉计算机的用户交换意见。用户的积极参与是数据库应用系统设计成功与否的关键。 (3)易于更动。当现实世界改变时容易修改和扩充,特别是软件、硬件环境变化时更应如此。 (4)易于向关系、网状或层次等各种数据模型转换。概念结构是各种数据模型的共同基础,它比任意一种数据模型更独立于机器,更抽象,从而更加稳定。描述概念结构的有力工具是E-R模型。P.P.S.Chen把用E-R模型定义的概念结构称为组织模式。设计概念结构的策略有3种: (1)自顶向下首先定义全局概念结构的框架,然后逐步细化。 (2)自底向上首先定义各局部应用的概念结构,然后将它们集成,得到全局概念结构。

相关文档
最新文档