手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

精通MYSQL数据库——连载十二

三大范式:第一范式,第二范式,第三范式,听着名字就很恐怖。但其实现在的人都被这个所谓的第三范式折腾死了,有事没事就拿出来涮涮,究竟怎么理解这些呢?一个一个慢慢的介绍。

数据库理论家们为数据库的设计1对N,N对N这种问题总结出了一个通用的解决方案,只需一步一步地三个范式(Normal Form)的规则应用到自己的数据库上就可以了。

第一范式的规则:

1、内容相似的数据必须“消除”(所谓消除,即再创建一个表来存储他们)

2、必须为每一组相关数组分别创建一个数据表

3、每条数据记录必须用一个主键来标识

第一条规则,看上去就比较适用于1对多的情况

第二条规则就不太好控制了,很多人认为第二条规则很难理解,数据的相关度,很难简单的描述清楚

第三条规则其实是一个实践经验,它的意思是数据表里的第一个数据行都应该包括一个独一无二的标识符作为索引。在使用MYSQL的时候,我们大多采用了自增字段来作为主键,但并非只有整数的自增字段才能作为索引,只要是独一无二的数据列,都可以用来做索引,之所以采用自增列,那是因为:1、不需要主动插入值2、整数列的时间和空间效率相对比其他类型的要高。

第二范式的规则:

1、只要数据列里的内容出现重复,就意味着应该把数据表拆分为多个子表

2、拆分形成的数据表必须用外键关联起来

第二范式,其实是在第一范式的基础上再进行一个拆分。指的就是第一范式规则的第二条内容。

外键关系在第二范式里显得特别重要,是因为第二范式时,数据会拆得更细,如果没有外键关联,恐怕数据就找不回来了。外键相当于我们日常所说的:交叉引用,对开发人员来说相当于指针。

第三范式的规则

第三范式只有一条规则:与主键没有直接关系的数据列必须“消除”

其实也就是把第二范式再分解,再建表。

可想而知,等到真正把一堆数据完全按照第三范式来进行设计的时候,恐怕在数据库里也就只能看到一堆ID了,数据呢?数据在哪里?通过外键,外键的外键,外键的外键的外键来慢慢的一个一个搜索吧。

对于MYSQL 4.1以下的版本,第三范式是会要了他们的命的,foreign key功能的不完善,让MYSQL 4.1以下版本,基本不适合第三范式,能用到第二范式设计时,数据表的效率已经几乎不能保证了。

这三个范式是著名学者E.F.Codd最先提出来的,后人在此基础 上对大到数学集合理论、小到关系数据库设计细节等诸多方面进行了研究和探索。如果对这方面有兴趣的朋友,还是多找找相关的书籍看看为好。

如果你的性子比较急,那么你可以尝试按照下面的方法来进行:

1、设计数据库的时候,一定要给自己充足的时间,如果等到数据库充满了数据,而程序也几乎开发完毕时,才发现数据库设计有缺陷,那么花费的代价就太大了

2、如果发现自己创建的表的数据列有序号,如name1,name2等,那一般就意味着还有更好的解决方案没有采用。可以考虑多创建一个表,而把这些分拆开。

3、第一时间往数据库里多插点测试数据,如果发现冗余量很大,往往就是表需要分拆的信号

4、设计时应该注意数据与数据之间的关联及引用关系

5、对于设计完的数据库,应该自己尝试写SQL语句,看看能否达到你预想的目标,如果达不到,那就要考虑是否设计的有问题。

6、如果你还是等不急,根据你的需要,到网上找找有没有类似的示例数据库,可以考虑拿来作借鉴。

说了这么多时间的范式,最后再说说他们的优缺点吧

缺点:数据表的个数越多,也就相对证明了从表单里获取数据并往表里插的时候,复杂性非常大,给开发人员会带来很大的困扰。同样,表多了,查询结果时,从中提取相关数据生成查询结果的复杂性也就越大;数据库的容量随着表的拆分量的增大而增大(不过现在也不是什么矛盾了,硬盘的价格几乎也快到了白菜价了,这点可以被忽略)

优点:严格按照范式设计出来的数据库,能够提供最丰富、最灵活的查询选项,人们往往都是在等到必须使用一种新的查询或者必须对数据进行一种新的分类时才会真正意识到这一点,但可惜的是,这些新需求往往都是出现在数据库已投入运行数月之后,到时候再改数据库,代价非常大。


现在工作有点忙,连载不会忘记,但更新频率会放慢,毕竟全部都是手工打出来的字。

不会象写小说那样太监掉的,毕竟这个东西对我自己来说,也是一种学习

给自己加油,为自己打气。也谢谢大家的支持

Tags: mysql, 精通, 数据库, 连载

收到一张受刺激的图片

同事发给我一张图片,让我大受刺激啊。我是没有那么多钱买那台电脑了,现在是寄希望于我同学,黑黑,不过,现在好象有一款神舟不错,就是最近的那批优雅Q系列,值得考虑一下,反正应该是比EEEPC会好上很多,重量是1.2KG,考虑中,160G硬盘呢,就是不知道散热怎么样。。。

传上那样受刺激的图片先

图片附件(缩略图):
大小: 294.34 K
尺寸: 498 x 376
浏览: 1714 次
点击打开新窗口浏览全图

Tags: 刺激, 笔记本, 图片, fujstu

杂谈二

博客本来就是用来记录内心想法的东西,只是我的博客可能记录的技术类的东西相对较多,国庆期间嘛,心思也不在技术上,于是就有了杂谈。

美国众议院、参议院终于同意了救市方案,7000亿美金,听起来很恐怖,可惜股市还是下跌了,恐怕华尔街那些人就非常开心了,压力会小一点了。我在上篇杂谈里就说过,不希望会有这种事情发生,毕竟有第一次也就会有第二次。布什在促进这件事成功,是因为不想留下污点?个人认为。两个竞选者促进成功,是因为这样可以在上台后压力小一点,反正用的钱又不是我的,也不是我下令的,责任不在我身上。可惜对于美国这种物权法很看中的国家来说,民众是怎么想的?7000亿,要纳多少税?在用自己的钱救市,心里是迷惘多一点还是期盼多一点?我交出去的钱,终于派上用场了?可惜,华尔街人应该也在想,怕啥,再怎么样,还是会有人帮我的。。。

除开经济,恐怕搞技术的人这两天都在关注着GOOGLE推出的在线备份MYSQL的innodb数据库?这里提到了,这里也提到了,其实讲的都是GOOLE CODE上的内容,谁来做小白鼠?短时间内谁敢用?估计还是要过段时间了,不过,这毕竟是一个想法,以后这种类似的东西会越来越多的吧?

再说说软件,思维导图,应该算是最近一段时间比较流行的东西了,思维导图是国内人员的翻译,详细介绍如下:

什么是MindManager?
  1.  
  2. MindManager是一个创造、管理和交流思想的通用标准,其可视化的绘图软件有着直观、友好的用户界面和丰富的功能,这将帮助您有序地组织您的思维、资源和项目进程。  
  3.   
  4. MindManager也是一个易于使用的项目管理软件,能很好提高项目组的工作效率和小组成员之间的协作性。它作为一个组织资源和管理项目的方法,可从脑图的核心分枝派生出各种关联的想法和信息。  
  5. MindManager可以使讨论和计划的过程从根本上发生变化,促进实现你的思想和方案。  
  6. 在一般的传统的讨论中至少包含四个步骤:  
  7. 1、从图表或白板上获得思想  
  8. 2、转录成为很难阅读的电子版  
  9. 3、在组织信息资料的过程中不可避免的要损失某些思想的重要关系  
  10. 4、通过印刷品或者电子邮件分发资料  
  11. 时间和资源在重复的信息中被浪费了,同事们很难理解会议的结果。  
  12. 但是,MindManager软件改变了研讨过程,只通过以下两个步骤就可以在同一页中显示出每个人的观点,从而避免了不必要的重复性的工作。  
  13. 1、迅速的以可视化形式获取和组织思想,促进团队内的协作和个体积极性。  
  14. 2、能够直接分发会议记录,比以往更快的落实各种设想。  
  15. 点击“输出”(export),可以得到PDF、Word、Powerpoint、HTML和图片格式文件。  
cnbeta上面有详细介绍,上面的也是COPY而来,地址为:http://www.cnbeta.com/articles/66193.htm,除了这个软件,另外这五款软件也是不错的,值得下载使用,我没有用过,但是看名称和介绍,就知道应该是值得用用:5个最出色必须拥有的windows xp 管理插件

Tags: 杂谈, google, mysql, 股票

精通MYSQL数据库——连载十一

一个好的数据库设计应该符合以下几点要求:
1、数据表里没有重复冗余的数据(如果总是往里面插入同样的数据,那应该是设计上有问题,当然现在在利用空间换时间的时候,多数人还是保留了这样的想法)
2、数据表里没有column1,column2,column3……这类没有明确意义的字段,因为这样会让后来人摸不清头脑
3、数据表占用的空间越小越好
4、使用频率高的数据表的查询,应该都能以简单高效的方式执行(表内数据少的时候,你就是10几个left join,你可能都感觉不出什么,但数据量一大,你一个left join都会让你感觉到速度慢下来,如果最初设计时没有满足这个要求,那么,以后想改可能也没有机会了)
这些也只是一些总的原则,也只是简单的介绍,以后会详细说明,当然上面这几点并非完全正确,就象第三范式,这是一个标准,但这个标准真的就是最好的吗?并非如此,但我们现在是在讲设计数据库,它好不好,目前不讲。以后一起讨论

为MYSQL的数据库和数据表甚至字段起名字还是有讲究的,最重要的是,千万不要使用保留关键字,而且有一些单词很奇怪,在4.0里面并不是关键字,但升级后,却变成了关键字。
详细的关键字列表请看:MYSQL手册中保留字部分
对于一个完整的设计应该注意以下几项:
1、由于MYSQL对数据列的命名不区分大小写,而对库名和表名区分大小写,因此为了规范和统一,请使用同样的规则,不要象程序代码那样来个骆驼命名啥的,这样只会给开发带来困难,建议是全部采用小写,移植、升级都方便
2、不要采用特殊字符或者中文,MYSQL对于多字节的处理并不十分完美,虽然支持中文建库、建表等,但实在不建议使用,如果你的服务器对中文支持不好,可能建库的时候就会是乱码,字段里,明明看到有值就是查不出,所以,为了规范,还是采用英文,26个字母的排列组合,没有那么复杂的。
3、数据库、表、字段的长度请不要超过64个字符,
4、表名和数据列名,请尽量采用有意义的名称,不要出现上文提到的那种column1,colnmn2之类的,时间长了,你自己都可能不知道是什么意思
5、给字段命名,需要有规范,因为这样会减少粗心带来的错误,比如username,user_name,如果分在各个表里,恐怕你每次写程序的时候,都得再检查一遍吧?对于由多个单词组成的字段,要么全部加下划线,要么全部不加,这样也比较有利于开发和维护
6、数据列的单复数,原因和5一样,要么全部单数,要么全部复数,一会单数一会复数的,开发和维护的时候,你就得盯着数据表来进行了。

数据库的设计是一件很复杂的事情,要在短时间内把一批数据分割开,并存储到数据库中,还得为开发人员提供足够的优化空间,不是一天两天就能完成的,当然现在有很多这样的工具,比如powerdesign(PD),在设计完后,还能导出数据库,确实是挺方便,但这样的软件,价格就太高了,不是我们所买得起的。
平时,我们还是使用WPS的电子表格,或者openoffice的电子表格功能,设计好数据表(电子表格最大的好处就是有几乎无穷的sheet,可以让你把一个很大的库放在这些sheet里),而且,几乎每台电脑上都会有这样的工具,便于交流。这样可以在最初的阶段对于一些数据列进行安排(没办法建立索引的,只是简单的用来布局,检查设计上是否有缺陷)

对于管理MYSQL,也有很多工具,比较常见的,就是:phpMyadmin;MYSQL自已也提供过,好象是mysqlFront?记不太清,现在我自己用的是navicat for mysql lite ,不用钱的东西都是好的。虽然在国内,大家都了解软件业的行情。自己也处于软件业的下游,能够使用正版,还是使用一下正版吧。不能使用正版的,找找免费版。
在我看的书上,它介绍说openoffice里其实还隐藏着连接数据库这个功能的,而且可以能够象创建视图一样来创建SQL,这个功能不错,我以后要好好看看,如果确实有用,那我WPS也不装了,直接使用openoffice。
不过,最常用的,最方便的,还是使用phpmyadmin,它实在是居家旅行、杀人灭口之大杀器。

Tags: mysql, 精通, 数据库, 连载

国庆休闲看电影

国庆在家里,几乎没有时间写什么东西,也就看看电影放松一下,写代码的时候总是被小孩哭声打断,而看电影则没有这样的困扰。
对于动画片还是一象的有爱好,好莱坞的动画片也越来越吸引人了,这两天看的是《霍顿与无名氏》,3D方面,中国短时间内是比不上美国了。
国内注重的是个人修养,有3D制作能力的人,不是很懂艺术,有艺术细胞的人,不懂3D。大多数有艺术细胞的人,都还是采用电脑来制作插画等。兔斯基也是这样而出名的,但几乎没有3D的东西出现。
最近几年看过的动画片有:《超人总动员》《汽车总动员》《篱笆墙外》《马达加斯加》《忍者神龟》等,实在太多了,并非总有的动画片都是那样的娱乐和搞笑,象《僵尸新娘》就很有好莱坞大片风范,《功夫熊猫》则有动作片风范,当然即使这样,片中也总还是存在了一些娱乐元素。
正如很多人说的:国外的动画片是给8岁~80岁的人看的,国内的动画片是给3~8岁的人看的。
《奥特曼》吸引了几代人?现在又改成了《灰太狼和喜羊羊》了,我实在看不出,这样的动画片为什么能够拿大奖,或许,这就是代沟吧。
现在很多FLASH都在制作《80年出生的所怀念的事》,动画片也是其中一项,国内国外都有,什么一休啦、希曼希瑞啦,花仙子,蓝精灵啥的。国内的黑猫警长,葫芦兄弟啥的。有多少人记得现在的动画片?
今年的《风云》我没有去看,是因为正好小孩出生,也没有时间去看。或许不错吧。。。
记得小时候动画最多的还是上海美影的,什么牧童、鱼盆啥的。最长的应该是《天书奇谭》吧,忘了是哪个制片厂出的了。
看过的朋友请留言,记忆中最多的动画片。呵呵

Tags: 电影, 休闲, 记忆, 怀念