Submitted by gouki on 2009, May 18, 10:26 PM
当你需要把分类表显示为树形时,肯定是需要进行一些妥协,就象前面文章中所说的,对数据进行这种处理意味着要无数的SQL查询命令或者复杂的客户端代码打交道。
可供选择的解决方案之一是在分类表中增加两列:sort,deepth,SORT字段负责给出各条数据记录将出现在层次关系树的第几行(假设同一层次的记录将分类名进行排序),DEEPTH字段则负责该分类所在的层次深度。
这种方式的好处是可以通过在MYSQL程序中执行下面这条简单查询的办法得到证明。例如:SELECT CONCAT( SPACE(deepth * 2) ,catename ) as category , sort , deepth FROM categories ORDER BY sort.其中concat函数的功能是把两个字符串并为一个,space函数的功能是生成指定个数的空格字符,AS关键字是给整个表达式起一个新的名字(别名,可能更容易理解一些)。
执行这样的SQL后,可以生成一个简单的树结构,树的尝试都是通过deepth的空格来显示的(这里显示简单的例子)
CATENAME SORT DEEPTH
主分类 0 0
一级分类 1 1
二级分类 2 2
重复一级分类 3 1
重复二级分类 4 2
三级分类 5 3
大致结构如上。
那么sort值和deepth的值是怎么来的呢?我们会进行一个简单的演示:
1、新建一个[新的三级分类],它被插入到[二级分类]下一级。而二级分类有关的数据是sort=2,deepth=2
2、那么我们首先要找到[二级分类]下是否已经有数据插入,SQL为:WHERE parentId = [二级分类]ID
3、将数据追加到二级分类下(即SORT+1,深度=)
4、更新相关数值
在这里面就涉及到一些问题,二级分类下如果有多个三级分类,三级分类还有四级分类,这时候SORT值的取值就比较难以控制。插入值后,它的SORT值其实是覆盖了原来的重复一级分类的SORT,那么,原来的SORT值>=当前SORT值的,都需要自动加1.
由此可见,虽然SORT值和DEEPTH值简化了查询工作,但实际上他的写操作变得频繁和复杂了。如果需要更新其中的一条记录,所涉及的操作还会更多。因为他必须要相应的调整sort值和deepth值。
因此,在实际情况中,你必须决定是对读操作进行优化还是对写操作进行优化。一般情况下,对于这种分类表,我都比较倾向于一次读出,然后利用 PHP语言进行深度的处理 也就是说,我是一般不会用SORT和DEEPTH字段的。因为大多数情况下,分类表都是一种比较固定的表,不大会读写,而在后台的读写,也不会影响到前台的操作。。
好象有点乱。
Tags: mysql, 连载
DataBase | 评论:0
| 阅读:20299
Submitted by gouki on 2009, May 17, 7:40 AM
昨天上课的时候,副班长说了一例不会爬行影响社交的案例,回家查了一下网络,发现不会爬就直接会走导致的一些问题,现在记录下来,一是给自己点警惕,二来也是让看到本文的爸爸妈妈注意一下。
第一篇:(已经找不到原作者了,我在这里转载的:http://baby.qqyy.com/yeq/0904/30/14ffa.html)
不会爬就会走的孩子不会影响智力,但的确容易出现心智问题。上海市人口与发展中心在母婴健康社区行的调研中显示,不会爬就会走的幼儿比例高达24.4%(61/250)。
人的脑神经系统是人所有活动的指挥中心,指挥中心拥有错综复杂的网络结构,目标是传递信号和发布命令。
但刚出生的宝宝脑指挥中心是不会指挥的,经过1年的工夫(即在婴儿时期),宝宝通过眼看、耳听、皮肤触、舌头味觉、鼻嗅等过程(医学上称感觉统合过 程),脑中的各种信号路径就建立和发达起来,这其中伴随着宝宝的运动能力的顺序发展,从3个月把头抬起来,5个月时会爬了,6-7个月孩子会坐了,9个月 孩子站起来,1岁会迈步行走,宝宝的运动发展直接影响感觉统合过程。
宝宝如果爬行少或爬行练习不足或没有经历爬行,将引起对称性颈紧张反射的 动作不成熟,表现为身体的上半部和下半部不自觉地对抗,就容易发生感觉统合失调症,如视觉和听觉不协调、视觉和动作不协调、听觉和动作不协调等。在幼儿期 家长还看不出危害,但当孩子上学后,危害就逐渐表现出来了,孩子情绪不稳定,固执、容易有侵略性,有挫折感、难适应学习环境、注意力不集中,不能持久地干 一件事情,不能长时间坐着,身体动来动去等,这些都直接影响孩子的学业和社会交往能力。那时家长就会着急了,感到孩子脑子挺聪明,可是怎么学习能力这样 差,老在学校闯祸呢。
可见,智力和心智不是一回事,感觉统合失调症就是心智方面异常了。并不是所有不会爬就会走的孩子都将影响心智,不过出现 不同程度心智异常的比例是非常高的。对于错过爬行期的孩子,家长不必紧张,也不能消极等待,应该积极尽早补上爬行环节(即进行运动性心智训练)。预防感觉 统合失调发生,这才是明智之举。
第二篇 :http://www.psytopic.com/mag/post/1024.html
爬行不是必经阶段:虽然大多数宝宝都会经过爬这个阶段,但爬行并不是宝宝生长发育的必经阶段。爬行是宝宝从会坐到会站、会走的一个过渡动作,也就是说,爬行是宝宝站、走的准备动作。而有的宝宝并不经历爬的阶段而直接学会站和走,妈妈也不必为此担心。
爬行好处多多:虽然说爬行不是必经阶段,但是爬行对宝宝的成长,的确好处多多。
首先,爬需要抬高并左右转动头部,还需要胳膊及手腕的力量支撑整个上半身,因此有利于强化宝宝手、脚、颈部的关节,并使腹部、颈部、四肢的骨骼关节和小肌肉群得到锻炼,可促进骨骼的生长、增强体力,并为将来的动作发展打下基础。
其次,爬行时,需要上肢及下肢的共同参与,是全身的协调动作,因此爬行可以增进大脑对四肢及眼睛的控制能力,锻炼手、脚、眼的协调性,有效预防感觉统合失调。
最 后,充分爬行可扩大孩子的活动范围,扩展他的视野,能促进大脑发育,开发孩子智力潜能。当孩子在襁褓中时,视听所及的范围很小;当他坐着或躺着时,视听范 围略有扩大,但得到的刺激仍然不多;而当孩子在会爬行时,姿态由静到动,范围由点到面,他所接触和观察到的事物逐渐增多,认识世界的范围也在扩大。同时, 他的思维、语言与想像能力也相应地得到了发展与提高。
建议
一.不会爬的宝宝怎么办?
1.多提供机会:宝宝在三四个月大时,如果老把宝宝放在推车里,宝宝很难有机会主动去爬。
2.模仿爬行:有些宝宝不会爬,可能是因为不知道怎么做。小宝宝的模仿能力极强,这时可以找一个会爬的小朋友来玩,两个宝宝在一起,鼓励他们爬。当宝宝看到另外的小伙伴爬行时,他也就会模仿,很快学会爬。
3. 适当辅助:当有些宝宝不会爬,这时父母就要略微帮点忙了!宝宝在爬行时四肢如何协调一致地运动是个最大的难题,他们经常是顾得了手却顾不了脚。这时父母可 以站在宝宝身后,两个手掌放在宝宝脚底,推动宝宝一只脚,当他往前爬一点时,再推动另一只脚,如此协助,帮他渡过爬行关。
二.会爬,但是不太爱爬的宝宝怎么办?
1. 创造良好环境:选择一个宽敞安全的地方作为宝宝的小小游乐区,将宝宝趴着放在地面上,在宝宝面前150公分左右的地方放一个宝宝喜欢的玩具。玩具能够吸引 宝宝的注意力,促使宝宝向前移动身体。宝宝爬过来时,妈妈可以一点点往后腿,让宝宝向前爬得更多。当宝宝够到玩具时,要让宝宝玩一会儿,并表扬宝宝,增强 他的成就感。
2.增加爬行的趣味性:家里若是有装冰箱、洗衣机的空纸箱,可以制成宝宝的爬行玩具。将纸箱横放在地上,把宝宝放在纸箱一头,然后妈妈到另一边,从纸箱里看宝宝,鼓励他(她)钻“山洞”,爬到妈妈这边来。宝宝早晨起来时,妈妈还可以让宝宝从被子的这头爬到另一头。
爱心小提示:有的宝宝在爬行时,一侧身体无力,需要另一条腿拖着向前移,并伴有其他动作发展迟缓时,妈妈就要小心了。最好去医院做个检查,排除神经系统发育障碍和一些脑损伤状况。
Tags: 智力, 爬
Baby | 评论:0
| 阅读:18867
Submitted by gouki on 2009, May 17, 7:15 AM
分类表是一种典型的层次化关系的表,从数据库设计工作的角度看,让每个分类记录的parentId字段指向它们父分类的Id即可。
把层次关系转化为数据表并不困难,而且层次还相对比较清晰,但在这种表面现象的背后还有许多难题在等待着用户解决。比如,我们无法只用一个简单的SELECT就把指定分类的父分类或者子分类全部查询出来,而必须通过多次查询才能解决这个问题(或者一次查出后,用程序来进行处理)。
事实上,数据库设计和SQL编程有着千丝万缕的联系,很难将他们完全区分开来,再者,如果SQL不足以把想要查询的数据从数据表里提取出来,那么,想拿出一个优秀的数据为设计方案就只能是一句空谈。
想要通过数据表去管理和使用层次关系,得解决很多难题,而这些难题几乎都与SQL语言不能递归查询这一事实有关。以分类表为例:
1、只用一个查询就把指定分类的所有父分类全部查出来是不可能的
2、把完整的数据表还原为层次关系(树状)也是一个难点,还是必须执行多次SQL才能完成。
3、把指定分类下所有子分类全部查询出来
4、设计时,一个分类不能有两个父分类(例如:sql语言既能够放在database分类中,但好象放在programming分类下也行,因此,如果sql语言有两个父分类仿佛才是合理的)
5、层次关系最担心 的是留下循环引用隐患(比如手工删除数据或者添加数据时,很容易导致第4条的情况发生,数据库层次断链或者重复等)
虽然有这些存在的问题,但并非不可解决,而从上面这些难点来说,层次关系往往会导致即使是一个相对简单的问题也需要很多条SQL查询才能得出答案,而且整个过程都相当慢。如果不使用层次关系(或者使用有限的层次关系),上述问题即都可以避免。如果必须使用多级的层次关系,增 加一些数据列或数据表来提供更多关于层次关系的信息,将有助于层次关系的解决方案变得简单一些。
从范式的标准来说,冗余是不对的,它会导致存储空间不必要的浪费,增加数据库内部管理工作的负担,但为了提高应用程序的执行效率,冗余反而是一种相当简明的解决方案,因此,数据库设计其实是一件多方妥协和折中的事。在数据库领域,通往同一个目标的道路往往有好多条,选择其中的任意一条,都意味着作出了这样或那样的妥协。做出什么样的妥协最有利这往往取决于数据库的具体使用情况:什么类型的查询发生的最为频繁?数据需不需要频繁修改?
Tags: mysql, 连载
DataBase | 评论:0
| 阅读:21677
Submitted by gouki on 2009, May 16, 10:28 PM
说实话,我真的嫉妒了。。。
看到这个标题,《熟悉十多种编程语言 9岁娃玩电脑堪比专家》,我真的嫉妒了。
看看:不到一个月建成个人网站 开发自己名字命名的操作系统“我还要在自己的系统中开发文档浏览、听音乐、看视频、浏览器等功能,将软件打造成为完全属于自己的软件。
再看看,他:利用网上没有版权的操作系统内核,开发了自己的操作系统,而且,又渐渐学会了C语言、VF(VisualFoxpro)、VB(Visual Basic)、VC、VC++、BASIC、Pascal、PHP(HypertextPreprocessor)、JAVA、 ASP(ActiveServerPage)等语言编程。
还有:他的表现令中国科技大学少年班的老师感到惊奇
我嫉妒了。。。
原文:http://hi.baidu.com/phpscript/blog/item/01e14cd46f3865cc51da4b11.html
Tags: 嫉妒, 电脑专家
Misc | 评论:3
| 阅读:18064
Submitted by gouki on 2009, May 16, 10:12 PM
好久好久没有写了。。。重拾起来,确实有点困难,不过,这次是坚持了。
关系数据库的三个范式最早是著名学者E.F.Codd提出来的,后人又在此基础上对大到数学集合理论,小到加设计细节等诸多方面进行了研究和探索。
有些数据库类图书在介绍三个范式时,又在其基础上增加了一些所谓的范式,但这些范式在实践中重要性不大。他们及其相应的规则只是把标准三个范式的所做的事情描述的更细致而己,这些充斥着“实体”、“属性”等专业术语却又彼此大致雷同的教条不仅没有把事情说清楚,反而会让人们更看不出它们与加有什么联系。
如果确实对数据库非常感兴趣,有一些书值得读读(我没有读过,但我现在看的书的原作者推荐):"SQL for smarties","The Practical SQL handbook","Database for mere mortals","SQL-99 complete,really"
当然如果你对读这些书的意向不大(我也意向不大,英文的,估计看不懂),那么如何很快就能上手呢?这里有一些简单的方法:
1、在设计数据库的时候,一定要给自己以充足的时间,如果数据库里已经充满了数据,而且配套的程序也已经开发完成的时候,再发现数据库设计方案还需要修改,那么花费的时间和精力可就太大了
2、如果发现自己给数据列起的名字中有序号,比如field1,field2之类的,则应该提高警惕,这种现象几乎上增加了 是意味着还有更好的解决方案没有想到——再多创建一个数据表
3、在第一时间向数据库输入一些测试用途的数据,而且要尽可能地多包括一些特殊情况,如果数据出现冗余,往往是应该把数据表拆分 的提示信号(但有时候也未必,比如用空间换时间的时候就需要冗余,这点在WEB应用上尤其明显)
4、注意发现和运用各个数据表之间的关联/引用关系
5、掌握SQL语言。缺少SQL编程经验的人是很验证拿出一个优秀数据库设计方案的。把信息存入数据库的目的是为了让更多人能够使用SQL查询命令把它们再迅速准备地查出来。只有了解了SQL查询命令的涉及范围,才能找出把数据分门别类地存入数据库的最佳办法
6、找个示例数据库做为借鉴(这个相对比较重要,比如你要开发论坛程序,那么你应该先找一些开源论坛进行安装,再对他们的数据库结构进行研究和借鉴是最快的学习方法)
Tags: mysql, 连载
DataBase | 评论:0
| 阅读:21612