『壹』 面试题_说说你是怎么数据库优化的
对sql语句优化:
就是能分开写的语句就分开写,不要一次性就解决,这样对效率来说是很大的开销的
避免使用不兼容的数据类型:
如float和int,char和varchar等都是不兼容的。
尽量避免在where子句中对字段进行函数或表达式操作
避免使用isnotnull、in等一些无法让系统使用索引操作的词
合理使用exists,notexists字句
尽量避免在索引过的字符数据中,使用非打头字母所有
避免困难的正规表达式
对mysql优化:
1.选取最适用的字段属性,可以的情况下,应该尽量把字段设置为NOTNULL
2.使用连接(JOIN)来代替子查询
3.使用联合来代替手动创建的临时表
4.增删改或者多条查询数据时使用事务操作
5.锁定表(代替事务的另一种方法)
6.使用外键(锁定表的方法可以维护数据的完整性,但它不能保证数据的关联性,应该使用外键)
7.可以优化SQL查询算法,提高查询速度8.给数据量大的查询次数频繁而修改次数少的数据表添加索引,提升查询速度
面试题_说说你是怎么数据库优化的
标签:锁定oat试题数据表arc手动频繁添加设置
『贰』 数据库如何设计
数据库设计的基本步骤
按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段
1.需求分析
2.概念结构设计
3.逻辑结构设计
4.物理结构设计
5.数据库实施
6.数据库的运行和维护
数据库设计通常分为6个阶段1分析用户的需求,包括数据、功能和性能需求;2概念结构设计:主要采用E-R模型进行设计,包括画E-R图;3逻辑结构设计:通过将转换成表,实现从E-R模型到关系模型的转换;4:主要是为所设计的数据库选择合适的和存取路径;5数据库的实施:包括编程、测试和试运行;6数据库运行与维护:系统的运行与数据库的日常维护。),主要讨论其中的第3个阶段,即逻辑设计。
在数据库设计过程中,需求分析和概念设计可以独立于任何数据库管理系统进行,逻辑设计和物理设计与选用的DAMS密切相关。
1.需求分析阶段(常用自顶向下)
进行数据库设计首先必须准确了解和分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,也是最困难,最耗时的一步。需求分析是否做得充分和准确,决定了在其上构建数据库大厦的速度与质量。需求分析做的不好,会导致整个数据库设计返工重做。
需求分析的任务,是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后在此基础上确定新的系统功能,新系统还得充分考虑今后可能的扩充与改变,不仅仅能够按当前应用需求来设计。
调查的重点是,数据与处理。达到信息要求,处理要求,安全性和完整性要求。
分析方法常用SA(Structured Analysis) 结构化分析方法,SA方法从最上层的系统组织结构入手,采用自顶向下,逐层分解的方式分析系统。
数据流图表达了数据和处理过程的关系,在SA方法中,处理过程的处理逻辑常常借助判定表或判定树来描述。在处理功能逐步分解的同事,系统中的数据也逐级分解,形成若干层次的数据流图。系统中的数据则借助数据字典(data dictionary,DD)来描述。数据字典是系统中各类数据描述的集合,数据字典通常包括数据项,数据结构,数据流,数据存储,和处理过程5个阶段。
2.概念结构设计阶段(常用自底向上)
概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象,形成了一个独立于具体DBMS的概念模型。
设计概念结构通常有四类方法:
自顶向下。即首先定义全局概念结构的框架,再逐步细化。
自底向上。即首先定义各局部应用的概念结构,然后再将他们集成起来,得到全局概念结构。
逐步扩张。首先定义最重要的核心概念结构,然后向外扩张,以滚雪球的方式逐步生成其他的概念结构,直至总体概念结构。
混合策略。即自顶向下和自底向上相结合。
3.逻辑结构设计阶段(E-R图)
逻辑结构设计是将概念结构转换为某个DBMS所支持的数据模型,并将进行优化。
在这阶段,E-R图显得异常重要。大家要学会各个实体定义的属性来画出总体的E-R图。
各分E-R图之间的冲突主要有三类:属性冲突,命名冲突,和结构冲突。
E-R图向关系模型的转换,要解决的问题是如何将实体性和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。
4.物理设计阶段
物理设计是为逻辑数据结构模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
首先要对运行的事务详细分析,获得选择物理数据库设计所需要的参数,其次,要充分了解所用的RDBMS的内部特征,特别是系统提供的存取方法和存储结构。
常用的存取方法有三类:1.索引方法,目前主要是B+树索引方法。2.聚簇方法(Clustering)方法。3.是HASH方法。
5.数据库实施阶段
数据库实施阶段,设计人员运营DBMS提供的数据库语言(如sql)及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行。
6.数据库运行和维护阶段
数据库应用系统经过试运行后,即可投入正式运行,在数据库系统运行过程中必须不断地对其进行评价,调整,修改。
数据库设计5步骤
Five Steps to design the Database
1.确定entities及relationships
a)明确宏观行为。数据库是用来做什么的?比如,管理雇员的信息。
b)确定entities。对于一系列的行为,确定所管理信息所涉及到的主题范围。这将变成table。比如,雇用员工,指定具体部门,确定技能等级。
c)确定relationships。分析行为,确定tables之间有何种关系。比如,部门与雇员之间存在一种关系。给这种关系命名。
d)细化行为。从宏观行为开始,现在仔细检查这些行为,看有哪些行为能转为微观行为。比如,管理雇员的信息可细化为:
· 增加新员工
· 修改存在员工信息
· 删除调走的员工
e)确定业务规则。分析业务规则,确定你要采取哪种。比如,可能有这样一种规则,一个部门有且只能有一个部门领导。这些规则将被设计到数据库的结构中。
====================================================================
范例:
ACME是一个小公司,在5个地方都设有办事处。当前,有75名员工。公司准备快速扩大规模,划分了9个部门,每个部门都有其领导。
为有助于寻求新的员工,人事部门规划了68种技能,为将来人事管理作好准备。员工被招进时,每一种技能的专业等级都被确定。
定义宏观行为
一些ACME公司的宏观行为包括:
● 招聘员工
● 解雇员工
● 管理员工个人信息
● 管理公司所需的技能信息
● 管理哪位员工有哪些技能
● 管理部门信息
● 管理办事处信息
确定entities及relationships
我们可以确定要存放信息的主题领域(表)及其关系,并创建一个基于宏观行为及描述的图表。
我们用方框来代表table,用菱形代表relationship。我们可以确定哪些relationship是一对多,一对一,及多对多。
这是一个E-R草图,以后会细化。
细化宏观行为
以下微观行为基于上面宏观行为而形成:
● 增加或删除一个员工
● 增加或删除一个办事处
● 列出一个部门中的所有员工
● 增加一项技能
● 增加一个员工的一项技能
● 确定一个员工的技能
● 确定一个员工每项技能的等级
● 确定所有拥有相同等级的某项技能的员工
● 修改员工的技能等级
这些微观行为可用来确定需要哪些table或relationship。
确定业务规则
业务规则常用于确定一对多,一对一,及多对多关系。
相关的业务规则可能有:
● 现在有5个办事处;最多允许扩展到10个。
● 员工可以改变部门或办事处
● 每个部门有一个部门领导
● 每个办事处至多有3个电话号码
● 每个电话号码有一个或多个扩展
● 员工被招进时,每一种技能的专业等级都被确定。
● 每位员工拥有3到20个技能
● 某位员工可能被安排在一个办事处,也可能不安排办事处。
2.确定所需数据
要确定所需数据:
a)确定支持数据
b)列出所要跟踪的所有数据。描述table(主题)的数据回答这些问题:谁,什么,哪里,何时,以及为什么
c)为每个table建立数据
d)列出每个table目前看起来合适的可用数据
e)为每个relationship设置数据
f)如果有,为每个relationship列出适用的数据
确定支持数据
你所确定的支持数据将会成为table中的字段名。比如,下列数据将适用于表Employee,表Skill,表Expert In。
Employee
Skill
Expert In
ID
ID
Level
Last Name
Name
Date acquired
First Name
Description
Department
Office
Address
如果将这些数据画成图表,就像:
3.标准化数据
标准化是你用以消除数据冗余及确保数据与正确的table或relationship相关联的一系列测试。共有5个测试。本节中,我们将讨论经常使用的3个。
关于标准化测试的更多信息,请参考有关数据库设计的书籍。
标准化格式
标准化格式是标准化数据的常用测试方式。你的数据通过第一遍测试后,就被认为是达到第一标准化格式;通过第二遍测试,达到第二标准化格式;通过第三遍测试,达到第三标准化格式。
如何标准格式:
1. 列出数据
2. 为每个表确定至少一个键。每个表必须有一个主键。
3. 确定relationships的键。relationships的键是连接两个表的键。
4. 检查支持数据列表中的计算数据。计算数据通常不保存在数据库中。
5. 将数据放在第一遍的标准化格式中:
6. 从tables及relationships除去重复的数据。
7. 以你所除去数据创建一个或更多的tables及relationships。
8. 将数据放在第二遍的标准化格式中:
9. 用多于一个以上的键确定tables及relationships。
10. 除去只依赖于键一部分的数据。
11. 以你所除去数据创建一个或更多的tables及relationships。
12. 将数据放在第三遍的标准化格式中:
13. 除去那些依赖于tables或relationships中其他数据,并且不是键的数据。
14. 以你所除去数据创建一个或更多的tables及relationships。
数据与键
在你开始标准化(测试数据)前,简单地列出数据,并为每张表确定一个唯一的主键。这个键可以由一个字段或几个字段(连锁键)组成。
主键是一张表中唯一区分各行的一组字段。Employee表的主键是Employee ID字段。Works In relationship中的主键包括Office Code及Employee ID字段。给数据库中每一relationship给出一个键,从其所连接的每一个table中抽取其键产生。
RelationShip
Key
Office
*Office code
Office address
Phone number
Works in
*Office code
*Employee ID
Department
*Department ID
Department name
Heads
*Department ID
*Employee ID
Assoc with
*Department ID
*EmployeeID
Skill
*Skill ID
Skill name
Skill description
Expert In
*Skill ID
*Employee ID
Skill level
Date acquired
Employee
*Employee ID
Last Name
First Name
Social security number
Employee street
Employee city
Employee state
Employee phone
Date of birth
将数据放在第一遍的标准化格式中
● 除去重复的组
● 要测试第一遍标准化格式,除去重复的组,并将它们放进他们各自的一张表中。
● 在下面的例子中,Phone Number可以重复。(一个工作人员可以有多于一个的电话号码。)将重复的组除去,创建一个名为Telephone的新表。在Telephone与Office创建一个名为Associated With的relationship。
将数据放在第二遍的标准化格式中
● 除去那些不依赖于整个键的数据。
● 只看那些有一个以上键的tables及relationships。要测试第二遍标准化格式,除去那些不依赖于整个键的任何数据(组成键的所有字段)。
● 在此例中,原Employee表有一个由两个字段组成的键。一些数据不依赖于整个键;例如,department name只依赖于其中一个键(Department ID)。因此,Department ID,其他Employee数据并不依赖于它,应移至一个名为Department的新表中,并为Employee及Department建立一个名为Assigned To的relationship。
将数据放在第三遍的标准化格式中
● 除去那些不直接依赖于键的数据。
● 要测试第三遍标准化格式,除去那些不是直接依赖于键,而是依赖于其他数据的数据。
● 在此例中,原Employee表有依赖于其键(Employee ID)的数据。然而,office location及office phone依赖于其他字段,即Office Code。它们不直接依赖于Employee ID键。将这组数据,包括Office Code,移至一个名为Office的新表中,并为Employee及Office建立一个名为Works In的relationship。
4.考量关系
当你完成标准化进程后,你的设计已经差不多完成了。你所需要做的,就是考量关系。
考量带有数据的关系
你的一些relationship可能集含有数据。这经常发生在多对多的关系中。
遇到这种情况,将relationship转化为一个table。relationship的键依旧成为table中的键。
考量没有数据的关系
要实现没有数据的关系,你需要定义外部键。外部键是含有另外一个表中主键的一个或多个字段。外部键使你能同时连接多表数据。
有一些基本原则能帮助你决定将这些键放在哪里:
一对多在一对多关系中,“一”中的主键放在“多”中。此例中,外部键放在Employee表中。
一对一在一对一关系中,外部键可以放进任一表中。如果必须要放在某一边,而不能放在另一边,应该放在必须的一边。此例中,外部键(Head ID)在Department表中,因为这是必需的。
多对多在多对多关系中,用两个外部键来创建一个新表。已存的旧表通过这个新表来发生联系。
5.检验设计
在你完成设计之前,你需要确保它满足你的需要。检查你在一开始时所定义的行为,确认你可以获取行为所需要的所有数据:
● 你能找到一个路径来等到你所需要的所有信息吗?
● 设计是否满足了你的需要?
● 所有需要的数据都可用吗?
如果你对以上的问题都回答是,你已经差不多完成设计了。
最终设计
最终设计看起来就像这样:
设计数据库的表属性
数据库设计需要确定有什么表,每张表有什么字段。此节讨论如何指定各字段的属性。
对于每一字段,你必须决定字段名,数据类型及大小,是否允许NULL值,以及你是否希望数据库限制字段中所允许的值。
选择字段名
字段名可以是字母、数字或符号的任意组合。然而,如果字段名包括了字母、数字或下划线、或并不以字母打头,或者它是个关键字(详见关键字表),那么当使用字段名称时,必须用双引号括起来。
为字段选择数据类型
SQL Anywhere支持的数据类型包括:
整数(int, integer, smallint)
小数(decimal, numeric)
浮点数(float, double)
字符型(char, varchar, long varchar)
二进制数据类型(binary, long binary)
日期/时间类型(date, time, timestamp)
用户自定义类型
关于数据类型的内容,请参见“SQL Anywhere数据类型”一节。字段的数据类型影响字段的最大尺寸。例如,如果你指定SMALLINT,此字段可以容纳32,767的整数。INTEGER可以容纳2,147,483,647的整数。对CHAR来讲,字段的最大值必须指定。
长二进制的数据类型可用来在数据库中保存例如图像(如位图)或者文字编辑文档。这些类型的信息通常被称为二进制大型对象,或者BLOBS。
关于每一数据类型的完整描述,见“SQL Anywhere数据类型”。
『叁』 关于数据库方面工作的建议
别期望一下子成为DBA,没那么简单,理论永远没有实际重要。
建议你:
1.找个应用软件公司,做做项目实施,包括搭建系统,日常维护等。或者找个甲方做做IT。
2.在实际经验的基础上,选择性的学习一些课程,比如ORACLE的等。
3.多研究,别基于表面。数据库的问题千奇百怪,没有最全面的知识,只有通过你自己的摸索实现。
『肆』 以后想做与数据库相关的工作,需要准备哪些知识呢
1.熟练掌握,最好精通 SQL 语句的书写
2.《数据库原理》 上中下,三卷必须学习。
3.深刻了解第三范式
4.《数据挖掘概念与技术》 或 《数据挖掘:概念与技术》
需要熟练掌握的其它技术:
a)合理建表、索引,主外键等..
b)存储过程的书写及优化
c)触发器的运用
d)其它跟数据库相关的技术..
如果你想从事 oracle 就要考一个 oracle的认证
如果你想从事 DB2 就要考一个 DB2的认证
这样的认证 比国家的认证要好些!
『伍』 如何学习数据分析
第一方面是数学基础,第二方面是统计学基础,第三方面是计算机基础。要想在数据分析的道路上走得更远,一定要注重数学和统计学的学习。数据分析说到底就是寻找数据背后的规律,而寻找规律就需要具备算法的设计能力,所以数学和统计学对于数据分析是非常重要的。
而想要快速成为数据分析师,则可以从计算机知识开始学起,具体点就是从数据分析工具开始学起,然后在学习工具使用过程中,辅助算法以及行业致死的学习。学习数据分析工具往往从Excel工具开始学起,Excel是目前职场人比较常用的数据分析工具,通常在面对10万条以内的结构化数据时,Excel还是能够胜任的。对于大部分职场人来说,掌握Excel的数据分析功能能够应付大部分常见的数据分析场景。
在掌握Excel之后,接下来就应该进一步学习数据库的相关知识了,可以从关系型数据库开始学起,重点在于Sql语言。掌握数据库之后,数据分析能力会有一个较大幅度的提升,能够分析的数据量也会有明显的提升。如果采用数据库和BI工具进行结合,那么数据分析的结果会更加丰富,同时也会有一个比较直观的呈现界面。
数据分析的最后一步就需要学习编程语言了,目前学习Python语言是个不错的选择,Python语言在大数据分析领域有比较广泛的使用,而且Python语言自身比较简单易学,即使没有编程基础的人也能够学得会。通过Python来采用机器学习的方式实现数据分析是当前比较流行的数据分析方式。
对大数据分析有兴趣的小伙伴们,不妨先从看看大数据分析书籍开始入门!B站上有很多的大数据教学视频,从基础到高级的都有,还挺不错的,知识点讲的很细致,还有完整版的学习路线图。也可以自己去看看,下载学习试试。
『陆』 我想做一个数据库,不知从哪里开始
添加可以变化的内容或功能,如字幕 (字幕组件:网页上显示水平滚动文本消息的区域。)、计数器 (计数器组件:FrontPage 中的组件,跟踪万维网网站的访问者的数目。)、时间戳、网页过渡、交互式按钮以及使用动态 HTML (DHTML) (DHTML:超文本标记语言 (HTML) 的扩展,添加多媒体、数据库访问以及对象模型,程序可使用它们更改页面元素(对象)的样式和属性并将现有元素(对象)替换为新的元素(对象)。) 的表现方式。
应用样式或使用样式表来设置文本格式。
用颜色或图片来设置网页背景
通过使用动态网页模板(它可以包括具有网页设置、格式设置和网页元素的网页)来创建自己的网页模板。
也可以从网站的图形外观(称之为描摹图像)开始进行设计。为此,可以在图形程序中创建一个网页图像的外观模型,并将其作为直观的参照,以便重新创建和描摹网页设计。
在 FrontPage 中进行编辑
您无须懂得如何使用 HTML 进行编码,即可使用 FrontPage。您可以象在字处理程序中一样 编辑网页(键入文本、设置文本格式以及添加图形、表格和其他网页元素) ,FrontPage 会在后台添加相应的 HTML 标记,您只须在“设计”视图中编辑网页。
但是,如果您想熟悉 HTML 或直接编辑 HTML 代码,则也可以使用“代码”视图,它显示了网页的 HTML 代码;或者“拆分”视图,它同时显示了“代码”和“设计”视图。
如果对 HTML 熟悉,可在“代码”视图中显示 HTML 标记,并自己编写和编辑这些 HTML 标记。利用 FrontPage 中的创建和维护优化代码选项,可以创建清晰的 HTML,并可以方便地将不想要的代码删除。
在 FrontPage 中,可以使用可扩展标记语言 (XML) (可扩展标记语言 (XML):标准标记语言 (SGML) 的一种浓缩形式,开发人员可用其创建自定义标签,为整理和提供信息提供了灵活性。) 来补充而不是替换您的 HTML。您可以查看或编辑文件,将标准格式应用到 XML 文件的代码结构中,查看 XML 目录树以及创建网页中 XML 数据的自定义显示。例如,可以创建网页来显示 XML 文件中的数据、对数据进行格式化以及应用过滤、排序和条件格式来按所需方式显示数据。
0.你真的需要一个网站吗? - 请先试一下BLOG是否就是你想要的.
1.给你的网站起名 - 注册域名,如何选择一个好名字 - 选择域名
2.给网站找个家 - 网页主机
3.开始发布你的信息 - 网页设计,使用网页模板快速完成网页设计
4.让你的读者很方便的和你联系 - 电子邮件服务器
5.让你期望的读者都能找到你的网站 -在搜索引擎上登记
让你的读者更容易找到你 - 提高你在搜索引擎上的等级
6.让所有人都知道你的存在 - 推广你的网站
就这么几步,具体地到 看吧。
这个网站叫“一步一步教你创建自己的网站”你跟着做就行了。
一 基本概念
1 网页(Web Page)
网页就是、、、、(很难懂的概念,极其抽象,看得见摸不着),你为什么到互联网去,你在WWW上看到的就是网页。它是由HTML编写的文件,上面有贴图,有音乐,有、、、、
2 主页(Home Page)
主页(Home Page)它是一个网页,是进入一个网站的开始画面,就同“瘟酒吧”的蓝天白云一样。也就是说,主页是一个网站的门面,要想设计出一个优秀的网站,就必须有一个“要让浏览者想不看都难”的主页,它必须引人入胜,能吸引每一个来访者的注意力,引发人们的好奇心,能让人产生一种深入探索你的网站的冲动。优秀的主页是一个好的网站必须具备的第一要素。
3 超级链接(Hyperlink)
超级链接是WWW的神经系统,它也是向导,把你从一个网页带到另一个网页,或者从网页的某一部分引导到另一部分。超级链接是用特殊的文本或图象来实现链接的,单击它就可以实现它的功能。
4 超文本(HyperText)
超文本是一种新的文件形式,指一个文件的内容可以无限地与相关资料链接。超文本是自然语言文本与计算机交互、转移和动态显示等能力结合,超文本系统允许用户任意构造链接,通过Hyperlink来实现。
5 超文本语言(Hyper Text Markup Language)
超文本语言(HTML)是制作编写网页、包含超级链接的超文件的标准语言,它由文本和标记组成。超文本文件的扩展名一般为 .html或.htm。
网站的组织结构
上网的网虫一定觉得网络上内容丰富、信息繁杂,但你是否想过一个网站的组织结构。网页的组织结构有以下四种:
1、线性结构
这是网站最简单的一种结构,它是以某种顺序组织的,可以是时间顺序,也可以是逻辑甚至是字母顺序。通过这些顺序呈线性地链接。如一般的索引就采用线性结构。线性结构是组织网页的基本结构,复杂的结构也可以看成是由线性结构组成的。
2、二维表结构
这种结构允许用户横向、纵向地浏览信息。它就好象一个二维表,如看课表一样。
3、等级结构
等级结构由一条等级主线构成索引,每一个等级点又由一条线性结构构成。如网站导航等就是这种结构。在构造等级之前,你必须完全彻底的理解你的网站内容,避免线性组织不严的错误,不方便浏览者。
4、网状结构
这是最复杂的组织结构,它完全没有限制,网页组织自由链接。这种结构允许访问者从一个信息栏目跳到另一个栏目去,其目的就是充分利用网络资源和充分享受超级链接。整个互联网就是一个超级大的“网”状结构。
开始构造你的网站
1、总体规划你的网站
当你想建立你的网站是你一定已经在网上浏览过n个小时了,当看见别人的网上之家的时候,或者受朋友“到我的网页看看”的精神刺激下,你开始产生网上建家的冲动了!但是这时候你并不知道你建网站的目的,你也不知道你该做成什么样的网页,“家里”该有些什么摆设。于是你应该静下来想一想,怎样规划你的网站。首先,你要有信心和知识。再次,你得有内容,网站应该有一个什么样的主题,别人来你的网页看什么。接着,你要组织你的网页了,它们该是什么结构,这种结构不仅要让访问者能感觉到你的风格,也要方便你自己维护网站。最后,构思出你的“引人入胜”的门面(Home Page)。
不对不对,你还得先申请一个放网页的空间。现在网上提供免费主页空间的网站很多,回到我的主页 去吧,我收集了一些。申请到空间后,带上ftp工具上路了!如 cuteftp,先在site manage添上你的,填写上传主机服务器的地址,你的用户名,你的密码,就可以了。开始连接主机,登录用户,打开右边允许你上传的目录,
把你要上传的东东都拖过去。注意:你的主页名应该是index.htm;index.html或者default.htm;default.html,按申请地方的要求来,还有就是文件名的大小写,unix主机可区分严格哟。上传后你就可以欣赏你的作品了,怎么样?兴奋吧!
6、宣传你的网页
网页做好了,也上传了。但现在没人知道,怎样宣传你的主页呢?当然是上聊天室,到处贴帖子,发E-MAIL通知好友,登录搜索引擎,用免费广告,同别人互相交换连接......
7、网站维护和更新
要想访问量大,你得经常更新你的网页,增加网页内容,并弥补网站存在的缺陷。
关于网页导览设计的九注意
一.当导览按钮连结到目前此页时
各Webpage若重复使用同一组的导览按钮,无可避免地会产生某一导览按钮连结到目前此页的情形。为达成界面设计的一致性,并没有绝对的必要性拿掉此导览按钮,但Webpage设计者可让此按钮不再具有超连结的功能;或将此按钮的彩度、亮度降低(如∶深绿色变成淡绿色,亮红色变成暗红色),使读者可清楚地意识到∶这个暗设下来的导览按钮不再具有超连结的功能。
二.不要在一篇短文里提供太多的超连结
适当、有效率地使用超连结,是一个优良的导览系统不可或缺的要件之一。但过份滥用超连结,造成短短的一篇文章里却处处是links,反而损害了Webpage行文的流畅与可亲性。在充斥着超连结的短文里,很可能其中不少是无意义、没必要的links。例如∶连结到一页只有两三行注解的link、连结到一页只放了「施工中」的招牌的link。在一篇长短适中的Webpage里(3、4个荧幕页面),文章里提供的文字式超连结最好不要超过10个以上,以使全页行文能够顺畅,而读者也不至于眼见一大堆超连结,反而不知从何点取才好。况且,连续、肩并肩地出现两、三个文字式超连结,很容易被误认为只是一个长度较长的超连结,于是被读者忽略掉,便也失去了这些超连结的原本功能。 如果您果真有那么多的超连结必须提供给读者,不如将这些超连结以条列的方式,一笔一笔清楚地列在一选单页或目录页上,既不防碍走文的顺畅,又呈现一目了然的导览连结。
『柒』 教你轻松掌握数据仓库的规划和构建策略
教你轻松掌握数据仓库的规划和构建策略
数据仓库作为决策支持系统(DSS)的基础,具有面向主题的、集成的、不可更新的、随时间不断变化的特性。这些特点说明了数据仓库从数据组织到数据处理,都与原来的数据库有很大的区别,这也就需要在数据仓库系统设计时寻求一个适合于数据仓库设计的方法。在一般的系统开发规划中,首先需要确定系统的功能,这些系统的功能一般是通过对用户的需求分析得到的。从数据仓库的应用角度来看,DSS分析员一般是企业中的中高层管理人员,他们对决策支持的需求不能预先做出规范的说明,只能给设计人员一个抽象地描述。
这就需要设计人员在与用户不断的交流沟通中,将系统的需求逐步明确,并加以完善。因此数据仓库的开发规划过程实际上是一个用户和设计人员对其不断了解、熟悉和完善的过程。 数据仓库的开发应用规划是开发数据仓库的首要任务。只有制定了正确的数据仓库规划,才能使组织主要力量有序地实现数据仓库的开发应用。在数据仓库规划中一般需要经历这样几个过程:选择实现策略、确定数据仓库的开发目标和实现范围、选择数据仓库体系结构、建立商业和项目规划预算。 当数据仓库规划完成后,需要编制相应的数据仓库规划说明书,说明数据仓库与企业战略的关系,以及与企业急需处理的、范围相对有限的开发机会,重点支持的职能部门和今后数据仓库开发工作的建议,实际使用方案和开发预算,作为数据仓库实际开发的依据。
1、选择数据仓库实现策略
数据仓库的开发策略主要有自顶向下、自底向上和这两种策略的联合使用。自顶向下策略在实际应用中比较困难,因为数据仓库的功能是一种决策支持功能。这种功能在企业战略的应用范围中常常是很难确定的,因为数据仓库的应用机会往往超出企业当前的实际业务范围,而且在开发前就确定目标,会在实现预定目标后就不再追求新的应用,是数据仓库丧失更有战略意义的应用。由于该策略在开发前就可以给出数据仓库的实现范围,能够清楚地向决策者和企业描述系统的收益情况和实现目标,因此是一种有效的数据仓库开发策略。该方法使用时需要开发人员具有丰富的自顶向下开发系统的经验,企业决策层和管理人员完全知道数据仓库的预定目标并且了解数据仓库能够在那些决策中发挥作用。
自底向上策略一般从某个数据仓库原型开始,选择一些特定的为企业管理人员所熟知的管理问题作为数据仓库开发的对象,在此基础上进行数据仓库的开发。因此,该策略常常用于一个数据集市、一个经理系统或一个部门的数据仓库开发。该策略的优点在于企业能够以较小的投入,获得较高的数据仓库应用收益。在开发过程中,人员投入较少,也容易获得成效。当然,如果某个项目的开发失败可能造成企业整个数据仓库系统开发的延迟。该策略一般用于企业洗碗对数据仓库的技术进行评价,以确定该技术的应用方式、地点和时间,或希望了解实现和运行数据仓库所需要的各种费用,或在数据仓库的应用目标并不是很明确时,数据仓库对决策过程影响不是很明确时使用。
在自顶向下的开发策略中可以采用结构化或面向对象的方法,按照数据仓库的规划、需求确定、系统分析、系统设计、系统集成、系统测试和系统试运行的阶段完成数据仓库的开发。而在自底向上的开发中,则可以采用螺旋式的原型开发方法,使用户可以根据新的需求对试运行的系统进行修改。螺旋式的原型开发方法要求在较短的时间内快速的生成可以不断增加功能的数据仓库系统,这种开发方法主要适合于这样一些场合:在企业的市场动向和需求无法预测,市场的时机是实现产品的重要组成部分,不断地改进对与企业的市场调节是必需的;持久的竞争优势来自连续不断地改进,系统地改进是基于用户在使用中的不断发现。 自顶向下和自底向上策略的联合使用具有两种策略的优点,既能快速的完成数据仓库的开发与应用,还可建立具有长远价值的数据仓库方案。但在实践中往往难以操作,通常需要能够建立、应用和维护企业模型、数据模型和技术结构的、具有丰富经验的开发人员,能够熟练的从具体(如业务系统中的元数据)转移到抽象(只基于业务性质而不是基于实现系统技术的逻辑模型);企业需要拥有由最终用户和信息系统人员组成的有经验的开发小组,能够清楚地指出数据仓库在企业战略决策支持中的应用。
2、确定数据仓库的开发目标和实现范围
为确定数据仓库的开发目标和实现范围,首先需要对企业管理者等数据仓库用户解释数据仓库在企业管理中的应用和发展趋势,说明企业组织和使用数据来支持跨功能系统的重要性,对企业经营战略的支持,以确定开发目标。在该阶段确认与使用数据仓库有关的业务要求,这些要求应该只支持最主要的业务职能部门,将使用精力集中在收益明显的业务上,使数据仓库的应用立即产生效果,不应该消耗太多的精力在各个业务上同时铺开数据仓库的应用。
在确定开发目标和范围以后,应该编制需求文档,作为今后开发数据仓库的依据。 数据仓库开发的首要目标是确定所需要信息的范围,确定用户提供决策帮助时,在主题和指标域需要哪些数据源。这就需要定义:用户需要什么数据?面向主题的数据仓库需要什么样的支持数据?为成功地向用户提交数据,开发人员需要哪些商业知识?哪些背景知识?这就需要定义整体需求,以文件的形式整理现存的记录系统和系统环境,对使用数据仓库中数据的候选应用系统进行标识、排序,构造一个传递模型,确定尺度、事实及时间标记算法,以便从系统中抽取信息且将他们放入数据仓库。通过信息范围确定可为开发人员提供一个良好的分析平台,和用户一起分析哪些信息是数据仓库需要的,进行商业活动需要什么数据。开发人员可以和用户进一步定义需要,例如数据分级层次、聚合的层次、加载的频率以及需要保持的时间表等。 数据仓库开发的另一个重要目标是确定利用哪些方法和工具访问和导航数据?虽然用户都需要存取并且检索数据仓库的内容,但是所存取的粒度有所不同,有的可能是详细的记录,有的可能是比较概括的记录或十分概括的记录。用户要求的数据概括程度不同,将导致数据仓库的聚集和概括工具的需求不同。
数据仓库还有具有一定功能来访问和检索图表、预定义的报表、多维数据、概括性数据和详细记录。用户从数据仓库中获得信息,应该有电子表格、统计分析器和支持多维分析的分析处理器等工具的支持,以解释和分析数据仓库中的内容,产生并且验证不同的市场假设、建议和决策方案。为将决策建议和各种决策方案向用户清楚地表达出来,需要利用报表、图表和图像等强有力的信息表达工具。 数据仓库开发的其他目标,是确定数据仓库内部数据的规模。在数据仓库中不仅包含当前数据,而且包含多年的历史数据。数据的概括程度决定了这些数据压缩和概括的最大限度。如果要让数据仓库提供对历史记录进行决策查询的功能,就必须支持对大量数据的管理。数据的规模不仅直接影响决策查询的时间,而且还将直接影响企业决策的质量。
在数据仓库的开发目标中,还有:根据用户对数据仓库的基本需求,确定数据仓库中数据的含义;确定数据仓库内容的质量,以确定使用、分析和建议的可信级别;哪种类型的数据仓库可以满足最终用户的需求,这些数据仓库应该具有怎样的功能;需要哪些元数据,如何使用数据源中的数据等。 数据仓库的开发目标多种多样,十分复杂,需要开发人员和用户在开发与使用的过程中不断交互完善。因此,在规划中需要确定数据仓库的开发范围。使开发人员能够根据需求和目标的重要性逐步进行,并且在开发中吸取经验教训,为数据仓库在企业中的全部实现提供技术准备。因此,在为数据仓库确定总体开发方向和目标以后,就必须确定一个有限的能够很快体现数据仓库效益的使用范围。在考虑数据仓库苦的应用范围时,主要从使用部门的数量和类型、数据源的数量、企业模型的子集、预算分配以及开发项目所需的时间等角度分析。
在分析这些因素时,可从用户的角度和技术的角度两方面进行。 从用户的角度应该分析哪些部门最先使用数据仓库?是哪些人员为了什么目的使用数据仓库?以及数据仓库首先要满足哪些决策查询?因为这些决策查询往往确定了关于数据维数、报表的种类,这些因素都将确定数据仓库定义时所需要的数量关系。查询的格式越具体,越容易提供数据仓库的维数、聚集和概括的规划说明。 从技术角度分析,应该确定数据仓库中元数据库的规模,数据仓库的元数据库是存储数据仓库中数据定义的模型。数据定义存储在仓库管理器的目录中,可以作为所有查询和报表工具构造和查询数据仓库的依据。元数据库的规模直接表示了数据仓库中必须管理的数据规模。通过对元数据库规模的管理,实际上就确定了数据仓库中所需要管理的数据规模。
3、数据仓库的结构选择
数据仓库的结构可以进行灵活的选择,可将组织所使用的各种平台进行恰当的分割,把数据源、数据仓库和最终用户使用的工作站分割开来进行恰当的设计。
(1)数据仓库的应用结构
基于业务处理系统的数据仓库 在这种结构中,将运作的数据用于无需修改数据的只读应用程序中。具有这种结构的数据仓库元数据库是一种虚库,而不是数据仓库自身的元数据。在数据仓库元数据库的直接指导下,对数据仓库的查询就是简单的从数据库中抽取数据。
单纯数据仓库
利用在数据仓库中的数据源净化、集成、概括和集成等操作,将数据源从业务处理系统中传输进集中的数据仓库,各部门的数据仓库应用只在数据仓库中进行。这种结构经常发生在多部门、少用户使用数据仓库的情况下。这里的集中仅仅是逻辑上的,物理上可能是分散的。
单纯数据集市
数据集市是指在部门中使用的数据仓库,因为企业中的各个职能部门都有自己的特殊需要,而统一的数据仓库可能不能满足这些部门的特殊要求。这种体系结构经常发生在个别部门对数据仓库的应用感兴趣,而组织中其他部门却对数据仓库的应用十分冷漠之时,由热心的部门单独开发式所采用。
数据仓库和数据集市
企业各部门拥有满足自己需要的数据集市,其数据从企业数据仓库中获取,而数据仓库从企业各种数据源中收集和分配。这种体系结构是一种较为完善的数据仓库体系结构,往往发生在组织整体对数据仓库应用感兴趣之时所采用的体系结构。
(2)数据仓库的技术平台结构 单层结构
单层结构主要是在数据源和数据仓库之间共享平台,或者让数据源、数据仓库、数据集市与最终用户工作站使用同一个平台。共享一个平台可以降低数据抽取和数据转换的复杂性,但是共享平台在应用中可能遇到性能和管理方面的问题,这种体系结构一般在数据仓库规模较小,而组织的业务系统平台具有较大潜力之时所采用。
客户/服务器两层结构
一层为客户机,一层为服务器,最终用户访问工具在客户层上运行,而数据源、数据仓库和数据集市位于服务器上,该技术机构一般用于普通规模的数据仓库。
三层客户/服务器结构
基于工作站的客户层、基于服务器的中间层和基于主机的第三层。主机层负责管理数据源和可选的源数据转换;服务器运行数据仓库和数据集市软件,并且存储仓库的数据;客户工作站运行查询和报表运用程序,且还可以存储从数据集市或数据仓库卸载的局部数据。在数据仓库稍具规模,两层数据仓库结构已经不能满足客户的需求,要讲数据仓库的数据存储管理、数据仓库的应用处理和客户端应用分开之时,可以采用这种结构。
多层式结构
这是在三层机构基础上发展起来的数据仓库结构,在该结构中从最内数据层到最外层的客户层依次是:单独的数据仓库存储层、对数据仓库和数据集市进行管理的数据仓库服务层、进行数据仓库查询处理的查询服务层、完成数据仓库应用处理的应用服务层和面向最终用户的客户层。体系层次可能多达五层,这种体系结构一般用于超规模数据仓库系统。
4、数据仓库使用方案和项目规划预算
数据仓库的实际使用方案与开发预算,是数据仓库规划中最后需要确定的问题。因为数据仓库主要用于对企业管理人员的决策支持,确保其实用性是十分重要的,因此需要让最终用户参与数据仓库的功能设计。这种参与是通过用户的实际使用方案进行的,使用方案是一个非常重要的需求模型。实际使用方案必须有助于阐明最终用户对数据仓库的要求,这些要求有的只使用适当的数据源就可以得到基本满足,而有的却需要来自企业外部的数据源,这就需要通过使用方案将这些不同的要求联系起来。 实际使用方案还可以将最终用户的决策支持要求与数据仓库的技术要求联系起来。因为当用户确定最终要求后,为元数据库的范围确定一个界限。还可以确定所需要的历史信息的数量,当根据特定的用户进行数据仓库的规划时,就可确定最终用户所关心的维度(时间、方位、商业单位和生产企业),因为维度与所需要的概括操作有明显的关系,必须选择对最终用户有实际意义的维度,如:“月”、“季度”、“年”等。最后,还可以确定数据集市/数据仓库的结构需要,使设计人员确定采用单纯数据仓库结构,还是单纯的数据集市结构或者是两者相结合的结构。
在实际使用开发方案确定后,还需要对开发方案的预算进行估计,确定项目的投资数额。投资方案的确定可以依据以往的软件开发成本,但是这种预算的评估比较粗糙。另一种方法是参照结构进行成本评估,也就是说,将数据仓库实际使用方案所确定的构件进行分解,根据各个构件的成本进行预算估算。数据仓库的构件包含在数据源、数据仓库、数据集市、最终用户存取、数据管理、元数据管理、传输基础等部分中,这些构件有的在企业原有信息系统中已经具备,有的可以选择商品化构件,有的则需要自我开发。根据这些构件的不同来源,可以确定比较准确的预算。 在完成数据仓库规划后,就需要编制数据仓库开发说明书,说明系统与企业战略目标的关系,以及系统与企业急需处理的范围相对有限的开发机会,所设想的业务机会的说明以及目标任务概况说明、重点支持的职能部门和今后工作的建议。数据仓库项目应有明确的业务价值计划开始,在计划中需要阐明期望取得的有形和无形的利益。无形利益包含利用数据仓库使决策完成得更快更好等利益。
业务价值计划最好由目标业务主管来完成,因为数据仓库是用户驱动的,应该让用户积极参与数据仓库的建设,在规划书中要确定数据仓库开发目标的实现范围、体系结构和使用方案及开发预算。
『捌』 如何进行数据库的设计
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。
一、数据库和信息系统
(1)数据库是信息系统的核心和基础,把信息系统中大量的数据按一定的模型组织起来,提供存储、维护、检索数据的
功能,使信息系统可以方便、及时、准确地从数据库中获得所需的信息。
(2)数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在。
(3)数据库设计是信息系统开发和建设的重要组成部分。
(4)数据库设计人员应该具备的技术和知识:
数据库的基本知识和数据库设计技术
计算机科学的基础知识和程序设计的方法和技巧
软件工程的原理和方法
应用领域的知识
二、数据库设计的特点
数据库建设是硬件、软件和干件的结合
三分技术,七分管理,十二分基础数据
技术与管理的界面称之为“干件”
数据库设计应该与应用系统设计相结合
结构(数据)设计:设计数据库框架或数据库结构
行为(处理)设计:设计应用程序、事务处理等
结构和行为分离的设计
传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策早期的数据库设计致力于数据模型和建模方法研究,忽视了对行为的设计
如图:
三、数据库设计方法简述
手工试凑法
设计质量与设计人员的经验和水平有直接关系
缺乏科学理论和工程方法的支持,工程的质量难以保证
数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价
规范设计法
手工设计方
基本思想
过程迭代和逐步求精
规范设计法(续)
典型方法:
(1)新奥尔良(New Orleans)方法:将数据库设计分为四个阶段
S.B.Yao方法:将数据库设计分为五个步骤
I.R.Palmer方法:把数据库设计当成一步接一步的过程
(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) 检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。