数据库计划中的14个才略

本源:站长资讯  




1. 原始票据与实体之间的关系
  可所以一对一、一对多、多对多的关系。在浅显情形下,它们是一对一的关系:即一张原始票据对应且只对应一个实体。在非凡情形下,它们可以是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以相识为底子表。清楚明明这种对应关系后,对我们计划录入界面年夜有好处。

  〖例1〗:一份员工经历资料,在人力资本信息零碎中,就对应三个底子表:员工底子情形表、社会关系表、使命简历表。这便是“一张原始单证对应多个实体”的规范例子。


   2. 主键与外键
  浅显而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(由于它无子孙), 但必需要有外键(由于它有父亲)。
  主键与外键的计划,在全局数据库的计划中,占据首要职位地方。当全局数据库的计划完成当前,有个美国数据库计划专家说:“键,到处都是键,除了键之外,什么也没有”,这便是他的数据库计划经历之谈,也反映了他对信息零碎中间(数据模型)的高度笼统头脑。由于:主键是实体的高度笼统,主键与外键的配对,表示实体之间的跟尾。


   3. 底子表的性质
  底子表与中间表、暂时表不同,由于它具有如下四个特征:
   (1) 原子性。底子表中的字段是不可再分化的。
   (2) 原始性。底子表中的记载是原始数据(底子数据)的记载。
   (3) 归结性。由底子表与代码表中的数据,可以派生出一切的输入数据。
   (4) 坚决性。底子表的结构是绝对坚决的,表中的记载是要暂时生涯的。
相识底子表的性质后,在计划数据库时,就能将底子表与中间表、暂时表区分隔隔离松散来。


   4. 范式尺度
  底子表及其字段之间的关系, 应只管餍足第三范式。然则,餍足第三范式的数据库计划,每每不是最好的计划。为了进步数据库的运转功用,每每需求低沉范式尺度:适当添加冗余,抵达以空间换功夫的目的。

  〖例2〗:有一张寄存商品的底子表,如表1所示。“金额”这个字段的存在,标明该表的计划不餍足第三范式,由于“金额”可以由“单价”乘以“数量”失踪失踪,说明');“金额”是冗余字段。然则,添加“金额”这个冗余字段,可已往进盘问统计的速度,这就是以空间换功夫的作法。
  在Rose 2002中,规定列有两品种型:数据列和对照争论列。“金额”如许的列被称为“对照争论列”,而“单价”和“数量”如许的列被称为“数据列”。
  表1 商品表的表结构
  商品称号 商品型号 单价 数量 金额
  电视机 29吋 2,500 40 100,000
  
   5. 伟年夜地相识三个范式
  伟年夜地相识三个范式,关于数据库计划年夜有好处。在数据库计划中,为了更好地利用三个范式,就必需伟年夜地相识三个范式(伟年夜地相识是够用的相识,并不是最科学最正确的相识):
  第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分化;
  第二范式:2NF是对记载的专注性约束,要求记载有专注标识,即实体的专注性;
  第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余.
  没有冗余的数据库计划可以做到。然则,没有冗余的数据库未必是最好的数据库,偶尔为了进步运转功用,就必需低沉范式尺度,适当生涯冗余数据。详尽做法是:在见地数据模型计划时苦守第三范式,低沉范式尺度的使命放到物理数据模型计划时思索。低沉范式便是添加字段,应允冗余。


   6. 要长于辨认与正确处理赏罚多对多的关系
  若两个实体之间存在多对多的关系,则应消弭这种关系。消弭的方法是,在两者之间添加第三个实体。如许,原本一个多对多的关系,今朝变为两个一对多的关系。要将原本两个实体的属性公道地分派到三个实体中去。这里的第三个实体,素质上是一个较庞年夜的关系,它对应一张底子表。浅显来讲,数据库计划东西不能辨认多对多的关系,但能处理赏罚多对多的关系。

  〖例3〗:在“图书馆信息零碎”中,“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关系,是一个规范的多对多关系:一本图书在不同功夫可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之间添加第三个实体,该实体取名为“借还书”,它的属性为:借还功夫、借还标志(0表示借书,1表示还书),其余,它还应该有两个外键(“图书”的主键,“读者”的主键),使它能与“图书”和“读者”跟尾。


   7. 主键PK的取值方法
   PK是供次序员运用的表间跟尾东西,可所以一无物理意义的数字串, 由次序主动加1来完成。也可所以有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,倡议字段的个数不要太多,多了不光索引占用空间年夜,并且速度也慢。


   8. 正确理解数据冗余
  主键与外键在多表中的屡次出现, 不属于数据冗余,这个见地必需清楚,现实上有良多人还不清楚。非键字段的屡次出现, 才是数据冗余!并且是一种低级冗余,即屡次性的冗余。低级冗余不是字段的屡次出现,而是字段的派生出现。

  〖例4〗:商品中的“单价、数量、金额”三个字段,“金额”便是由“单价”乘以“数量”派生出来的,它便是冗余,并且是一种低级冗余。冗余的目的是为了进步处理赏罚速度。只需低级冗余才会添加数据的纷比方律性,由于统一数据,可以从不同功夫、地址、脚色上多次录入。是以,我们倡议低级冗余(派素性冗余),支持低级冗余(屡次性冗余)。


   9. E--R图没有尺度谜底
  信息零碎的E--R图没有尺度谜底,由于它的计划与画法不是专注的,只需它笼盖了零碎需求的业务范围和成果内容,便是可行的。反之要点窜E--R图。虽然它没有专注的尺度谜底,并不料味着可以随意计划。好的E—R图的尺度是:结构清楚、关联简便、实体个数适中、属性分派公道、没有低级冗余。


   10. 视图手艺在数据库计划中很有用
  与底子表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供次序员运用数据库的一个窗口,是基表数据综合的一种方式, 是数据处理赏罚的一种方法,是用户数据失踪密的一种才干。为了终止庞年夜处理赏罚、进步运算速度和节约存储空间, 视图的定义深度浅显不得超出三层。 若三层视图仍不敷用, 则应在视图上定义暂时表, 在暂时表上再定义视图。如许屡次交迭定义, 视图的深度就不受限定了。

  关于某些与国度政治、经济、手艺、军事和宁静所长有关的信息零碎,视图的感染愈加首要。这些零碎的底子表完成物理计划之后,当即在底子表上直立第一层视图,这层视图的个数和结构,与底子表的个数和结构是完全雷同。并且规定,一切的次序员,一概只准在视图上操纵。只需数据库办理员,带着多个职员配合驾驭的“宁静钥匙”,才干间接在底子表上操纵。请读者想想:这是为什么?


   11. 中间表、报表和暂时表
  中间表是寄存统计数据的表,它是为数据堆栈、输入报表或盘问结果而计划的,偶尔它没有主键与外键(数据堆栈除外)。暂时表是次序员个人计划的,寄存暂时记载,为个人所用。基表和中间表由DBA维护,暂时表由次序员本人用次序主动维护。


   12. 完整性约束表今朝三个方面
  域的完整性:用Check来完成约束,在数据库计划东西中,对字段的取值范围终止定义时,有一个Check按钮,通过它定义字段的值城。参照完整性:用PK、FK、表级触发器来完成。用户定义完整性:它是一些业务纪律,用存储进程和触发器来完成。


   13. 防范数据库计划打补丁的方法是“三少准绳”
   (1) 一个数据库中表的个数越少越好。只需表的个数少了,才干说明');零碎的E--R图少而精,去失踪了屡次的多余的实体,组成了对客不雅全国的高度笼统,终止了零碎的数据集成,防范了打补丁式的计划;
   (2) 一个表中组合主键的字段个数越少越好。由于主键的感染,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不光节约了运转功夫,并且节约了索引存储空间;
   (3) 一个表中的字段个数越少越好。只需字段的个数少了,才干说明');在零碎中不存在数据屡次,且很少罕有据冗余,更首要的是煽动读者学会“列变行”,如许就防范了将子表中的字段拉入到主表中去,在主表中留下良多空余的字段。所谓“列变行”,便是将主表中的一部分外容拉出去,其余单独建一个子表。这个方法很朴实,有的人便是不习气、不采用、不执行。
  数据库计划的适用准绳是:在数据冗余和处理赏罚速度之间找到相宜的均衡点。“三少”是一个个人见地,综合不雅念,不能伶仃某一个准绳。该准绳是绝对的,不是绝对的。“三多”准绳一定是错误的。试想:若笼盖零碎异样的成果,一百个实体(共一千个属性) 的E--R图,一定比二百个实体(共二千个属性) 的E--R图,要好得多。
  倡议“三少”准绳,是叫读者学会利用数据库计划手艺终止零碎的数据集成。数据集成的步调是将文件零碎集成为利用数据库,将利用数据库集成为主题数据库,将主题数据库集成为全局综合数据库。集成的水平越高,数据共享性就越强,信息孤岛现象就越少,整个企业信息零碎的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。
  倡议“三少”准绳的目的,是防范读者利用打补丁手艺,赓续地对数据库终止增编削,使企业数据库变成了随意计划数据库表的“渣滓堆”,或数据库表的“年夜杂院”,末了形成数据库中的底子表、代码表、中间表、暂时表紊乱无章,不计其数,招致企奇不雅单位的信息零碎无法维护而瘫痪。
   “三多”准绳任何人都可以做到,该准绳是“打补丁方法”计划数据库的正理学说。“三少”准绳是少而精的准绳,它要求有较高的数据库计划才略与艺术,不是任何人都能做到的,由于该准绳是根绝用“打补丁方法”计划数据库的实际根据。


   14. 进步数据库运转功用的方法
  在给定的零碎硬件和琐金饰件前提下,进步数据库零碎的运转功用的方法是:
   (1) 在数据库物理计划时,低沉范式,添加冗余, 常用触发器, 多用存储进程。
   (2) 当对照争论非常庞年夜、并且记载条数非常庞年夜时(比方一千万条),庞年夜对照争论要先在数据库皮相,以文件零碎方式用C 言语对照争论处理赏罚完成之后,末了才入库追加到表中去。这是电信计费零碎计划的经历。
   (3) 发现某个表的记载太多,比方超出一千万条,则要对该表终止水平联络。水平联络的做法是,以该表主键PK的某个值为界线,将该表的记载水平联络为两个表。若发现某个表的字段太多,比方超出八十个,则垂直联络该表,将原本的一个表分化为两个表。
   (4) 对数据库办理零碎DBMS终止零碎优化,即优化各种零碎参数,如缓冲区个数。
   (5) 在运用面向数据的SQL言语进行程序计划时,只管授与优化算法。
  总之,要进步数据库的运转功用,必需从数据库零碎级优化、数据库计划级优化、次序完成级优化,这三个条理上同时下功夫。

  上述十四个才略,是良多人在年夜批的数据库剖析与计划实际中,逐步总结出来的。关于这些经历的运用,读者不能生帮硬套,去世记硬背,而要消化相识,踏扎实实,迅速驾驭。并逐步做到:在利用中展开,在展开中利用。







版权声明: 原创作品,应允转载,转载时请务必以超链接方式标明文章 原始来因 、作者信息和本声明。不然将追究司法责任。

posted @ 2011-03-07 19:01  蓝色的天空III  阅读(118)  评论(0编辑  收藏  举报