仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1072|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL编程:数据库计划范式深切浅出

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
甚至一个有经验的Windows管理者也可以轻松部署并开始学习它,而你不需投入一分钱来了解这个数据库。  干系数据库计划之时是要恪守必定的划定规矩的。特别是数据库计划范式现复杂先容1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,尚有第四范式和第五范式留到今后再先容。在你计划数据库之时,若能切合这几个范式,你就是数据库计划的妙手。
  第一范式(1NF):在干系形式R中的每个详细干系r中,假如每一个属性值都是不成再分的最小数据单元,则称R是第一范式的干系。例:如职工号,姓名,德律风号码构成一个表(一团体大概有一个办公室德律风和一个家里德律风号码)标准成为1NF有三种办法:
  一是反复存储职工号和姓名。如许,关头字只能是德律风号码。
  二是职工号为关头字,德律风号码分为单元德律风和室庐德律风两个属性
  三是职工号为关头字,但强迫每笔记录只能有一个德律风号码。
  以上三个办法,第一种办法最不成取,按实践情形拔取后两种情形。
  第二范式(2NF):假如干系形式R(U,F)中的一切非主属性都完整依附于恣意一个候选关头字,则称干系R是属于第二范式的。
  例:选课干系SCI(SNO,CNO,GRADE,CREDIT)个中SNO为学号,CNO为课程号,GRADEGE为成就,CREDIT为学分。由以上前提,关头字为组合关头字(SNO,CNO)
在使用中利用以上干系形式有以下成绩:
a.数据冗余,假定统一门课由40个先生选修,学分就反复40次。
b.更新非常,若调剂了某课程的学分,响应的元组CREDIT值都要更新,有大概会呈现统一门课学分分歧。
c.拔出非常,如企图开新课,因为没人选修,没有学号关头字,只能等有人选修才干把课程和学分存进。
d.删除非常,若先生已毕业,从以后数据库删除选修纪录。某些门课程重生还没有选修,则此门课程及学分纪录没法保留。
  缘故原由:非关头字属性CREDIT仅函数依附于CNO,也就是CREDIT部分依附组合关头字(SNO,CNO)而不是完整依附。
  办理办法:分红两个干系形式SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新干系包含两个干系形式,它们之间经由过程SC1中的外关头字CNO相接洽,必要时再举行天然连接,恢复了本来的干系
  第三范式(3NF):假如干系形式R(U,F)中的一切非主属性对任何候选关头字都不存在传送信任,则称干系R是属于第三范式的。
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION)各属性分离代表学号,
姓名,地点系,系称号,系地点。
  关头字SNO决意各个属性。因为是单个关头字,没有部分依附的成绩,一定是2NF。但这干系一定有大批的冗余,有关先生地点的几个属性DNO,DNAME,LOCATION将反复存储,拔出,删除和修正时也将发生相似以上例的情形。
  缘故原由:干系中存在传送依附酿成的。即SNO->DNO。而DNO->SNO却不存在,DNO->LOCATION,因而关头辽SNO对LOCATION函数决意是经由过程传送依附SNO->LOCATION完成的。也就是说,SNO不间接决意非主属性LOCATION。
  办理目地:每一个干系形式中不克不及留有传送依附。
  办理办法:分为两个干系S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
  注重:干系S中不克不及没有外关头字DNO。不然两个干系之间得到接洽。
  BCNF:假如干系形式R(U,F)的一切属性(包含主属性和非主属性)都不传送依附于R的任何候选关头字,那末称干系R是属于BCNF的。或是干系形式R,假如每一个决意要素都包括关头字(而不是被关头字所包括),则RCNF的干系形式。
  例:配件办理干系形式WPE(WNO,PNO,ENO,QNT)分离表堆栈号,配件号,职工号,数目。有以下前提
a.一个堆栈有多个职工。
b.一个职工仅在一个堆栈事情。
c.每一个堆栈里一种型号的配件由专人卖力,但一团体能够办理几种配件。
d.统一种型号的配件能够分放在几个堆栈中。
  剖析:由以上得PNO不克不及断定QNT,由组合属性(WNO,PNO)来决意,存在函数依附(WNO,PNO)->ENO。因为每一个堆栈里的一种配件由专人卖力,而一团体能够办理几种配件,以是有组合属性(WNO,PNO)才干断定卖力人,有(WNO,PNO)->ENO。由于一个职工仅在一个堆栈事情,有ENO->WNO。因为每一个堆栈里的一种配件由专人卖力,而一个职工仅在一个堆栈事情,有(ENO,PNO)->QNT。
  找一下候选关头字,由于(WNO,PNO)->QNT,(WNO,PNO)->ENO,因而(WNO,PNO)能够决意全部元组,是一个候选关头字。依据ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)也能决意全部元组,为另外一个候选关头字。属性ENO,WNO,PNO均为主属性,只要一个非主属性QNT。它对任何一个候选关头字都是完整函数依附的,而且是间接依附,以是该干系形式是3NF。
  剖析一下主属性。由于ENO->WNO,主属性ENO是WNO的决意要素,可是它自己不是关头字,只是组合关头字的一部分。这就形成主属性WNO对别的一个候选关头字(ENO,PNO)的部分依附,由于(ENO,PNO)->ENO但反过去不建立,而P->WNO,故(ENO,PNO)->WNO也是传送依附。
  固然没有非主属性对候选关头辽的传送依附,但存在主属性对候选关头字的传送依附,一样也会带来贫苦。如一个新职工分派到堆栈事情,但临时处于练习阶段,没有自力卖力对某些配件的办理义务。因为短少关头字的一部分PNO而没法拔出到该干系中往。又如某团体改成不论配件了往卖力平安,则在删除配件的同时该职工也会被删除。
  办理举措:分红办理EP(ENO,PNO,QNT),关头字是(ENO,PNO)事情EW(ENO,WNO)其关头字是ENO
  弱点:分化后函数依附的坚持性较差。云云例中,因为分化,函数依附(WNO,PNO)->ENO丧失了,因此对本来的语义有所损坏。没有表现出每一个堆栈里一种部件由专人卖力。有大概呈现一部件由两团体或两个以上的人来同时办理。因而,分化以后的干系形式下降了部分完全性束缚。
  一个干系分化成多个干系,要使得分化成心义,最少的请求是分化后不丧失本来的信息。这些信息不但包含数据自己,并且包含由函数依附所暗示的数据之间的互相制约。举行分化的方针是到达更高一级的标准化水平,可是分化的同时必需思索两个成绩:无损连接性和坚持函数依附。偶然常常不成能做到既有没有损连接性,又完整坚持函数依附。必要依据必要举行衡量。
1NF直到BCNF的四种范式之间有以下干系:
BCNF包括了3NF包括2NF包括1NF
  小结:
  目地:标准化目标是使布局更公道,打消存储非常,使数据冗余只管小,便于拔出、删除和更新
  准绳:服从观点单一化"一事一地"准绳,即一个干系形式形貌一个实体或实体间的一种接洽。标准的本色就是观点的单一化。
  办法:将干系形式投影分化成两个或两个以上的干系形式。
  请求:分化后的干系形式汇合应该与原干系形式"等价",即经由天然连接能够恢回复干系而不丧失信息,并坚持属性间公道的接洽。
  注重:一个干系形式结这分化能够失掉分歧干系形式汇合,也就是说分化办法不是独一的。最小冗余的请求必需以分化后的数据库可以表达本来数据库一切信息为条件来完成。其基本方针是节俭存储空间,制止数据纷歧致性,进步对干系的操纵效力,同时满意使用需求。实践上,其实不必定请求全体形式都到达BCNF不成。偶然存心保存部分冗余大概更便利数据查询。特别关于那些更新频度不高,查询频度极高的数据库体系更是云云。
  在干系数据库中,除函数依附以外另有多值依附,连接依附的成绩,从而提出了第四范式,第五范式等更高一级的标准化请求。在此,今后再谈。
  列位伴侣,你看事后有何感受,实在,任何一本数据库基本实际的书城市讲这些器材,思索到良多网友是中途落发,来做数据库。特找一本书年夜抄特抄一把,列位有甚么成绩,也别问我了,自已往找一本干系数据库实际的书往看吧,说不定,对列位年夜有匡助。说是说以上是基本实际的器材,请人人想一想,你在做数据库计划的时分有无思索过遵过以上几个范式呢,有无在数据库计划做得欠好之时,想想,对照以上所讲,究竟是违背了第几个范式呢?
  我见过的数据库计划,很少有人做到很切合以上几个范式的,一样平常说来,第一范式人人都能够恪守,完整恪守第二第三范式的人很少了,恪守的人必定就是计划数据库的妙手了,BCNF的范式呈现时机较少,并且会损坏完全性,你能够在做计划之时不思索它,固然在ORACLE中可经由过程触发器办理其弱点。今后我们配合做计划之时,也但愿人人恪守以上几个范式。
RDBMS并非没有局限性。它们难以扩展,需要大量的资源来配置和维护,比如时间、硬件和人力。同样,它们往往遵循峰值性能模型,这就要求系统按照峰值容量来配置可用性,而不考虑典型的数据使用情况。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-17 05:46:59 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
分手快乐 该用户已被删除
板凳
发表于 2015-1-20 13:53:48 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
莫相离 该用户已被删除
地板
发表于 2015-1-29 08:41:27 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
老尸 该用户已被删除
5#
发表于 2015-2-14 12:16:27 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
透明 该用户已被删除
6#
发表于 2015-3-4 06:16:08 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
山那边是海 该用户已被删除
7#
发表于 2015-3-11 17:44:51 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
乐观 该用户已被删除
8#
发表于 2015-3-19 04:27:41 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
小女巫 该用户已被删除
9#
发表于 2015-3-27 08:07:09 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 07:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表