
第1章 Access 概述各结构的功能1、 access是一种关系型数据库。2、Access是一个面向对象的开发工具3、Access不仅是表对象的集合,还包含查询、窗体、报表、页、宏、模块等共7个对象。(1)表是Access数据库的核心,用于存储数据。其他对象都不能存放数据。实际应用系统中必须包含的对象是表。(2)查询包含数据检索和数据 *** 作。(3)窗体的数据源可以是表、查询等。窗体的作用有:在数据库中输入和显示数据;利用切换面板来打开数据库中的其他窗体和报表;用自定义框来接受用户的输入及根据输入执行 *** 作。(4)报表只能显示、输出数据。利用报表可以对数据进行排序、分组、统计计算。(5)页对象是连接到数据库的Web页,只能用浏览器打开,主要用于Internet或Intranet(6)宏是一组 *** 作命令的集合,每个 *** 作都用于实现特定的功能。(7)模块是用VBA语言编写的。VBA语言是VB语言的子集。第2章 创建数据库创建空数据库1、Access数据库不仅是数据表的集合,还是查询、窗体等相关对象的集合。一个数据库对应一个文件,且容量不能扩展,最大2G(不要一个数据表建一个数据库)。Access数据库与数据库文件是一一对应的,数据库文件的后缀是MDB。2、创建数据库有两种方式:建空数据库,使用模板。3、要求掌握创建空数据库。数据库创建好以后是没有任何对象的。需要在空数据库内创建表等对象。4、打开数据库的四种方式分别代表的含义是什么?打开:多用户 *** 作,数据可以更改。独占:单用户使用,对象可以被更改。(设置密码的条件)只读:数据处于只读状态。独占只读:单用户使用,且数据只读。5、设置密码的过程:(1)以独占方式打开数据库,(2)工具安全设置数据库密码。设置了密码就拥有了对数据库的所有权限。第3章 设计Access表对象导入数据—文本、Excel文件、关系型数据库文件建立关系—主键、关系1、表对象由两部分构成:结构和数据。表设计视图只包含表结构,不包含表数据。数据表视图只包含数据,显示的是记录值。2、要求掌握的表的创建方法:通过导入外部数据来创建表对象;或通过使用Access生成表查询对象来创建表对象。3、建表的注意事项:4、数据类型:会选择合适的数据类型(有十种)如文本(最长255字符),备注(最长65535字符),自动编号(唯一顺序值,不能修改),数字,日期/时间,货币,是/否,OLE对象,超级链接,查阅向导(使用查阅向导只是可以用下拉列表选择输入字段值,并非数据类型变为查阅向导)等。注意:OLE对象、超级链接、备注属性的字段,不能用于排序、分组、索引;字段属性:(1)字段大小,(2)格式(用于显示或打印的,并不影响存储的数据值),(3)输入掩码(设定输入格式、限制数值的输入),(4)标题(字段的别名,浏览数据时看到的),(5)默认值(如date(),sql 为getdate(),取当前系统日期),(6)有效性规则,有效性文本,(7)必填字段,(8)索引(可以加快查询和排序的速度,但会降低增、删、改的速度)5、导入外部数据类型:文本,Excel,ODBC。注意:(1)导入文本文件时,注意文本识别符,如双引号、单引号;(2)Excel一次只能导一张表;(3)用ODBC导入SQL数据时注意更改默认数据库,否则找不到需要的表。步骤:新建DSN-数据源选择SQL Server-DSN名字放默认位置(点完成)-指定服务器就是本机(“local”或者“”)-下一步(不能点完成)-使用windowsID验证-更改默认数据库为要导入数据所在的数据库-测试连接;6、导入方法:文件获取外部数据导入;表右键导入;新建导入表。注意:(1)显示数据时选择“高级”“简体中文”;(2)导入数据时选择数据保存位置时,都选择“新表中”;(3)不需要的字段可以选择“跳过”,考试不管;(4)多个字段做主键时,导入过程中选“无主键”,导入完毕再设置主键。7、建立关系步骤为:(1)打开数据库文件,单击工具栏上的“关系”按钮(2)d出“显示表”对话框,选“表”标签,选中要建立关系的表,按添加按钮或直接双击该表名,添加所需要建立关系的表(3)用鼠标拖动来建立关系8、表的关系:定义参照完整性的条件:1同属一个access 数据库2有主关键字 3字段类型匹配4相关表中外部字段的值必须是主表的主键字段中已有的值9、级联删除、级联更新的含义:(1)级联更新:更改主表主键时,自动更新相关表中相应值,否则仅可以更新主表中与子表无关的值;(2)级联删除:删除主表中的记录时,自动删除相关表中的有关记录,否则仅可以删除主表中与子表记录无关的记录。第4章 处理Access的数据1、Access提供了两种方法来使用外部数据源的数据:(1)将数据导入到当前数据库中的新Access表中。(上机 *** 作用导入)(2)将数据库保留在其当前的位置上,以当前格式使用但不导入,称之为链接。2、导入和链接的比较:(不用背,理解,选择题)(1)因为导入和链接的本质不同,导入是把整个数据“拷贝”过来,而链接只是去“使用”它,所以导入过程较慢,但 *** 作快了;而链接则相反,它的过程快,但以后的 *** 作较慢。(2)导入过来的数据文件若有修改,并不会影响原来的旧数据库,因为它是复制后的结果;链接的数据库却会随时反映所做的修改,所以链接方式比较适合在网络上“资源共享”的环境中应用。导入方式即使是通过网络,也只是一种“数据享用”。3、何时使用导入,何时使用链接?(不用背,理解,选择题)(1)如果目的文件太大,根本不可能导入,或者导入进来之后,硬盘就没有缓冲的空间了,这种情况下只有使用链接。(2)如果目的文件很小,而且不会经常改变,那可以使用导入。如果内容常常变更,那么即使文件很小也应该使用链接,这样比较方便。(3)如果数据不需要和其它用户共享,那可以使用导入,否则就应该使用链接。(4)如果很重视 *** 作速度,希望得到最佳的使用效率,那么应该使用导入。4、Access里面的删除是无法撤销的,而且删除、插入是记录级的 *** 作。更新是字段级的。5、对于定义OLE对象的字段,在输入字段值时,应单击右键插入对象。第5章 排序、筛选数 (仅笔试)1、排序的概念:排序是按事先给定的一个或多个字段值的内容,以特定顺序对记录集进行重新排序。排序不适用于OLE对象、超级链接、备注。2、不同类型数据排序的规则有所不同。如,字符串的排序不同于数字的排序,如文本的”21” < ”3” < ”31”。3、日期表示方法不同于SQL,用 “# “来限定,如#2006-1-1# < #2007-1-7#。4、排序的种类:简单排序和复杂排序。第6章 简单排序:按某字段进行统一升序或降序。(按钮在工具栏)(2)复杂排序:将记录按某些字段进行不统一的排序。如第一列升序,第二列降序……(数据表-“记录”-“筛选”-“高级筛选/排序”-应用筛选-保存)5、筛选记录有四种:按选定内容筛选(各条件之间是AND的关系,不能实现或的关系);按窗体筛选;按输入筛选目标;复杂筛选6、通配符为和?7、复杂筛选可以保存为查询对象。但有一定的局限性,只能单表筛选8、筛选对象:表、查询、窗体。9、便于浏览,可以对列冻结(固定在最左边,取消不会回到原位置)或隐藏。10、查找和替换可以针对整个表,也可以针对某个字段进行。第6章 创建选择查询对象查询用设计器做!创建简单选择查询对象创建参数查询对象创建交叉表查询对象1、一个Access查询对象实质上是一条SQL语句,建立一个查询后,可以将它看作是一个简化的数据表。2、查询分为选择查询(4种)(简单查询、汇总查询、参数查询、交叉表查询)和 *** 作查询(4种)(生成表查询、更新查询、删除查询、追加查询)3、(了解就行,选择题)在Access中,提供了简单向导、交叉表查询向导、查找重复项查询向导、查找不匹配项查询向导。四种查询向导和一种设计视图查询。注意:用向导查询时不能输入限制条件,因而有一定的局限性。老师建议用设计视图来做查询。4、查询提供了三种视图:设计视图,数据表视图,SQL视图。5、多表查询须通过两表间字段关系来设置连接条件。考试按照默认内连接来做。6、date()-30 表示系统时间减去天数;date()-#2005-1-1#表示2005年1月1日和当前日期相差的天数(仅Access可以这样表示)7、表达式运算符(参见书P81)8、连接表达式:+ (要求两端数据类型一致) & (强制连接为字符串,一般用这个)9、通配符“”和“?”10、常用函数(参见书P82)注:取整是直接截断小数。MID :取中间某段字符,用法同substring11、某日期以后,不含该日期。12、查询1950年以后出生的职工姓名和出生日期。Year(出生日期)> 1950,把Year(出生日期)写在字段位置上,> 1950 写在准则位置上。13、汇总:选择汇总按钮,聚合函数选择,where,指定返回记录数14、[参数]用中括号括起来。参数名称不要和字段名相同,否则系统认为是该字段15、交叉表一定含有两个以上的分组,有行标题多个、一个列标题和值,行标题和列标题一定是分组,值是一个统计函数。若用设计器进行交叉表查询的时候。横向求和的表达式和函数与值一样,只是在交叉表选项中选择行标题。16、交叉表查询要注意选择查询类型交叉表查询。17、交叉表带参数的查询,必须先声明参数,查询菜单参数定义参数(不用加[ ]),指定数据类型。第7章 熟悉和使用查询对象四种都要求,重点是更新查询和生成表查询。1、删除查询:注意选择查询类型,设计器里至少有两个列:where 表示条件,from 表示删除哪个表的记录。涉及多表时,用另外的表作条件即可。2、更新查询:注意选择查询类型,(1)字段一栏不能写表达式,只能写在“更新到”一栏中;“更新到”表达式中要引用字段时一定要用中括号括起来,例如:[基本工资]12;(2)可能比较复杂,例如更新到:“20”&right([邮政编码],len[邮政编码]-2),准则:like “10”3、追加查询是将选定的一个或多个表对象中的复合某些特定条件的一组记录添加至另一个或多个表对象的尾部。表示条件的列的“追加到”字段名要为空。掌握例题即可,例:(1)将年龄大于60岁的职工信息最加到职工表中(2)将信息中心的职工信息最加到职工表中4、生成表查询:选择查询类型。后边 *** 作跟选择查询差不多。注意:追加查询的目标表是存在的;生成表查询目标表是新建的表,如果选择已经存在的表作为目标表,则会重写表的内容!!5、当一个字段在多张表中都有时,用[表名][字段名]方式引用第8章 报表建议用向导创建报表(向导、自动报表、设计器)表格式报表△组合、合计和汇总报表标签,文本框的使用1、报表的作用:报表以格式化的形式显示数据、输出数据,利用报表可以对数据进行排序、分组、统计。2、报表的数据源可以是表、查询(只能是选择查询),也可以是SQL语句。3、报表的分类:纵栏式、表格式、组合|合计和汇总报表(掌握这两种)、图表式、邮件标签式。4、报表页眉:显示标题。报表页脚:对整个报表的总体统计值,如总计、总平均等。页面页眉:分页打印时每页的标题。页面页脚:例如”共”&[Pages]&”页,第”&[page]&”页”。分组的页眉页脚:页眉显示分组的依据,页脚定义分组后每组的统计数字,如分组后每组的小计等;5、控件的使用要求:标签和文本框。标签显示的内容不变。文本框用于绑定数据(公式)。6、报表属性可以点标尺最左边的黑方块,通过报表属性可重新选择数据源或定义条件。7、 *** 作步骤:(1) 创建查询对象——报表1。最好设置公式列的别名,格式等,使其最接近报表格式。(2) 使用向导创建报表。A 选择数据源¬——报表1;B 按一定的顺序选择需要的字段;C 选择要分组的字段;D 选择要排序的字段;(百分比、总计等也在这里选择)E 选择报表布局;F 文本框内的表达式一定要写”=”(3) 在报表模式下也可以通过工具箱旁边的“排序和分组”按钮重新排序和分组。8、用向导创建报表的时候不能实现列相加,如:工资 = 基本工资 + 职务津贴,因此可创建一个查询,还可以为字符型字段选择分组间隔要注意!9、注意(1) 为报表创建查询时是否需要进行分组(Group By),是由查询显示的字段是否有统计函数决定的,显示字段要用到统计函数,查询里用group by,否则只在创建报表时选择分组字段即可;(2) 在做通过交叉表查询生成报表时,如果要在每行显示“小计”内容,则应该先在查询里做“横向求和”(参见第6章15点或书P96);(3) 可以在公式中直接引用控件名称,例如求每个人工资占总工资的百分比,可以直接把文本框(控件)名写入公式,例如“=[工资]/[工资总计sum]”(前者是每个人工资的文本框名,后者是工资总计的文本框名);(4) 报表分组显示时,要为每组内容求统计数(如小计),点击“工具栏”“排序与分组”按钮,显示组页脚-选择“是”,在这里添加;10、当选择的字段不含数值型数据时,向导不会出现 汇总选项 按钮。11、有时候找不到组页脚怎么办?排序和分组按钮组页眉:是;组页脚:是12、交叉表不要求分组。先建好交叉表查询对象,然后用报表向导,一路默认就好。纵向求和报表页脚:标签:合计 =sum([列名1]) =sum([列名2]) =sum([列名3])
分表是分散数据库压力的好方法。
分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库。
当然,首先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。
分表的分类
1、纵向分表
将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的。)
分表理由:根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的)
案例:
对于一个博客系统,文章标题,作者,分类,创建时间等,是变化频率慢,查询次数多,而且最好有很好的实时性的数据,我们把它叫做冷数据。而博客的浏览量,回复数等,类似的统计信息,或者别的变化频率比较高的数据,我们把它叫做活跃数据。所以,在进行数据库结构设计的时候,就应该考虑分表,首先是纵向分表的处理。
这样纵向分表后:
首先存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。
其次,对冷数据进行更多的从库配置,因为更多的 *** 作时查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
其实,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库。或者mongodb 一类的nosql 数据库,这里只是举例,就先不说这个。
2、横向分表
字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。
分表理由:根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。
案例:同上面的例子,博客系统。当博客的量达到很大时候,就应该采取横向分割来降低每个单表的压力,来提升性能。例如博客的冷数据表,假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均,只是假设),这样压力就降低了很多很多。
延伸:为什么要分表和分区?
日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。
什么是分表?
分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去 *** 作它。
什么是分区?
分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候 *** 作的还是大表名字,db自动去组织分区的数据。
MySQL分表和分区有什么联系呢?
1、都能提高mysql的性高,在高并发状态下都有一个良好的表现。
2、分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。
3、分表技术是比较麻烦的,需要手动去创建子表,app服务端读写时候需要计算子表名。采用merge好一些,但也要创建子表和配置子表间的union关系。
4、表分区相对于分表, *** 作方便,不需要创建子表。
我们知道对于大型的互联网应用,数据库单表的数据量可能达到千万甚至上亿级别,同时面临这高并发的压力。Master-Slave结构只能对数据库的读能力进行扩展,写 *** 作还是集中在Master中,Master并不能无限制的挂接Slave库,如果需要对数据库的吞吐能力进行进一步的扩展,可以考虑采用分库分表的策略。
1、分表
在分表之前,首先要选中合适的分表策略(以哪个字典为分表字段,需要将数据分为多少张表),使数据能够均衡的分布在多张表中,并且不影响正常的查询。在企业级应用中,往往使用org_id(组织主键)做为分表字段,在互联网应用中往往是userid。在确定分表策略后,当数据进行存储及查询时,需要确定到哪张表里去查找数据,
数据存放的数据表 = 分表字段的内容 % 分表数量
2、分库
分表能够解决单表数据量过大带来的查询效率下降的问题,但是不能给数据库的并发访问带来质的提升,面对高并发的写访问,当Master无法承担高并发的写入请求时,不管如何扩展Slave服务器,都没有意义了。我们通过对数据库进行拆分,来提高数据库的写入能力,即所谓的分库。分库采用对关键字取模的方式,对数据库进行路由。
数据存放的数据库=分库字段的内容%数据库的数量
3、即分表又分库
数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发访问压力问题。
当数据库同时面临海量数据存储和高并发访问的时候,需要同时采取分表和分库策略。一般分表分库策略如下:
中间变量 = 关键字%(数据库数量单库数据表数量)
库 = 取整(中间变量/单库数据表数量)
表 = (中间变量%单库数据表数量)
实例:
1、分库分表
很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子:
复制代码 代码如下:
<php
for($i=0;$i< 100; $i++ ){
//echo "CREATE TABLE db2members{$i} LIKE db1members
";
echo "INSERT INTO members{$i} SELECT FROM members WHERE mid%100={$i}
";
}
>
2、不停机修改mysql表结构
同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理:
先创建一个临时表:
/创建临时表/
CREATE TABLE members_tmp LIKE members
然后修改members_tmp的表结构为新结构,接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的,mid是主键,一个区间一个区间的导,基本是一次导出5万条吧,这里略去了
接着重命名将新表替换上去:
/这是个颇为经典的语句哈/
RENAME TABLE members TO members_bak,members_tmp TO members;
就是这样,基本可以做到无损失,无需停机更新表结构,但实际上RENAME期间表是被锁死的,所以选择在线少的时候 *** 作是一个技巧。经过这个 *** 作,使得原先8G多的表,一下子变成了2G多。
数据库的作用:
1、实现数据共享:数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
2、减少数据的冗余度:同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。
3、保持数据的独立性:数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑结构)。
4、数据实现集中控制:文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
5、数据一致性和可维护性,以确保数据的安全性和可靠性:主要包括:安全性控制、完整性控制、并发控制,使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用。
6、故障恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误 *** 作造成的数据错误等。
扩展资料
数据库技术的应用及特点
数据库最初是在大公司或大机构中用作大规模事务处理的基础。后来随着个人计算机的普及,数据库技术被移植到PC机(PersonalComputer,个人计算机)上,供单用户个人数据库应用。接着,由于PC机在工作组内连成网,数据库技术就移植到工作组级。
现在,数据库正在Internet和内联网中广泛使用。20世纪60年代中期,数据库技术是用来解决文件处理系统问题的。当时的数据库处理技术还很脆弱,常常发生应用不能提交的情况。20世纪70年代关系模型的诞生为数据库专家提供了构造和处理数据库的标准方法,推动了关系数据库的发展和应用。
1979年,Ashton-Tate公司引入了微机产品dBaseⅡ,并称之为关系数据库管理系统,从此数据库技术移植到了个人计算机上。20世纪80年代中期到后期,终端用户开始使用局域网技术将独立的计算机连接成网络,终端之间共享数据库,形成了一种新型的多用户数据处理,称为客户机/服务器数据库结构。
现在,数据库技术正在被用来同Internet技术相结合,以便在机构内联网、部门局域网甚至>
—数据库
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。
一、数据库和信息系统
(1)数据库是信息系统的核心和基础,把信息系统中大量的数据按一定的模型组织起来,提供存储、维护、检索数据的
功能,使信息系统可以方便、及时、准确地从数据库中获得所需的信息。
(2)数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在。
(3)数据库设计是信息系统开发和建设的重要组成部分。
(4)数据库设计人员应该具备的技术和知识:
数据库的基本知识和数据库设计技术
计算机科学的基础知识和程序设计的方法和技巧
软件工程的原理和方法
应用领域的知识
二、数据库设计的特点
数据库建设是硬件、软件和干件的结合
三分技术,七分管理,十二分基础数据
技术与管理的界面称之为“干件”
数据库设计应该与应用系统设计相结合
结构(数据)设计:设计数据库框架或数据库结构
行为(处理)设计:设计应用程序、事务处理等
结构和行为分离的设计
传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策早期的数据库设计致力于数据模型和建模方法研究,忽视了对行为的设计
如图:
三、数据库设计方法简述
手工试凑法
设计质量与设计人员的经验和水平有直接关系
缺乏科学理论和工程方法的支持,工程的质量难以保证
数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价
规范设计法
手工设计方
基本思想
过程迭代和逐步求精
规范设计法(续)
典型方法:
(1)新奥尔良(New Orleans)方法:将数据库设计分为四个阶段
SBYao方法:将数据库设计分为五个步骤
IRPalmer方法:把数据库设计当成一步接一步的过程
(2)计算机辅助设计
ORACLE Designer 2000
SYBASE PowerDesigner
四、数据库设计的基本步骤
数据库设计的过程(六个阶段)
1需求分析阶段
准确了解与分析用户需求(包括数据与处理)
是整个设计过程的基础,是最困难、最耗费时间的一步
2概念结构设计阶段
是整个数据库设计的关键
通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型
3逻辑结构设计阶段
将概念结构转换为某个DBMS所支持的数据模型
对其进行优化
4数据库物理设计阶段
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
5数据库实施阶段
运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果
建立数据库,编制与调试应用程序,组织数据入库,并进行试运行
6数据库运行和维护阶段
数据库应用系统经过试运行后即可投入正式运行。
在数据库系统运行过程中必须不断地对其进行评价、调整与修改
设计特点:
在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计
设计过程各个阶段的设计描述:
如图:
五、数据库各级模式的形成过程
1需求分析阶段:综合各个用户的应用需求
2概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图)
3逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式
4物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式
六、数据库设计技巧
1 设计数据库之前(需求分析阶段)
1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。
2) 了解企业业务可以在以后的开发阶段节约大量的时间。
3) 重视输入输出。
在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。
举例:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。
4) 创建数据字典和ER 图表
ER 图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对SQL 表达式的文档化来说这是完全必要的。
5) 定义标准的对象命名规范
数据库各种对象的命名必须规范。
2 表和字段的设计(数据库逻辑设计)
表设计原则
1) 标准化和规范化
数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。
举例:某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer 和Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer 表里包含该客户信息的那一行。
事实上,为了效率的缘故,对表不进行标准化有时也是必要的。
2) 数据驱动
采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。
举例,假如用户界面要访问外部数据源(文件、XML 文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
3) 考虑各种变化
在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。
举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。
字段设计原则
4) 每个表中都应该添加的3 个有用的字段
dRecordCreationDate,在VB 下默认是Now(),而在SQL Server • 下默认为GETDATE()
sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT • USER
nRecordVersion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原因 •
5) 对地址和电话采用多个字段
描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。
6) 使用角色实体定义属于某类别的列
在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。
举例:用PERSON 实体和PERSON_TYPE 实体来描述人员。比方说,当John Smith, Engineer 提升为John Smith, Director 乃至最后爬到John Smith, CIO 的高位,而所有你要做的不过是改变两个表PERSON 和PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、Engineer、Director、CIO 或者CEO 等。还有个替代办法就是改变PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。
7) 选择数字类型和文本类型尽量充足
在SQL 中使用smallint 和tinyint 类型要特别小心。比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767 就不能进行计算 *** 作了。
而ID 类型的文本字段,比如客户ID 或定单号等等都应该设置得比一般想象更大。假设客户ID 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。
8) 增加删除标记字段
在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。
3 选择键和索引(数据库逻辑设计)
键选择原则:
1) 键设计4 原则
为关联字段创建外键。 •
所有的键都必须唯一。 •
避免使用复合键。 •
外键总是关联唯一的键字段。 •
2) 使用系统生成的主键
设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷很容易。
3) 不要用用户的键(不让主键具有可更新性)
在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。
4) 可选键有时可做主键
把可选键进一步用做主键,可以拥有建立强大索引的能力。
索引使用原则:
索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。
1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。
3) 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
4) 不要索引常用的小型表
不要为小型数据表设置任何键,假如它们经常有插入和删除 *** 作就更别这样作了。对这些插入和删除 *** 作的索引维护可能比扫描表空间消耗更多的时间。
4 数据完整性设计(数据库逻辑设计)
1) 完整性实现机制:
实体完整性:主键
参照完整性:
父表中删除数据:级联删除;受限删除;置空值
父表中插入数据:受限插入;递归插入
父表中更新数据:级联更新;受限更新;置空值
DBMS对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制
用户定义完整性:
NOT NULL;CHECK;触发器
2) 用约束而非商务规则强制数据完整性
采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。
3) 强制指示完整性
在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。
4) 使用查找控制数据完整性
控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。
5) 采用视图
为了在数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。
5 其他设计技巧
1) 避免使用触发器
触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。
2) 使用常用英语(或者其他任何语言)而不要使用编码
在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。
3) 保存常用信息
让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。
4) 包含版本机制
在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。
5) 编制文档
对所有的快捷方式、命名规范、限制和函数都要编制文档。
采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。
对数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。
6) 测试、测试、反复测试
建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。
7) 检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
以上就是关于存储表中OLE对象性的数据,系统提供了什么方法全部的内容,包括:存储表中OLE对象性的数据,系统提供了什么方法、MySQL数据库性能优化之分区分表分库、什么是数据库啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)