This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(04)

时间:2007-12-23  来源:不详  作者:迈克DB

例如,在从score 表中检索学分时,不希望看到事件I D;但希望看到日期。这没有什么问题。数据库将会根据事件ID 从event 表中查找出日期。您还可能想要看看是测验的学分或测试的学分。这也不成问题。数据库将用相同的方法查找出学分类型,也是利用事件I D。请记住,这就是如像MySQL 这样的关系数据库的优势所在,即,使一样东西与另一样东西相关联,以便从多个来源得出信息并以您实际想看到的形式提供出来。在学分保存数据的情况中,MySQL 确实利用事件ID 将信息组合到了一起,而无需人工来完成这件事。
现在我们先来看看,如何使MySQL 完成这种将一个东西与另一个东西相联系的工作。
假定希望看到1 9 9 9年9月2 3号的学分,针对某个特定日期中给出的事件的学分查询如下所示:

相当吓人,是吗?这个查询通过将score 表的记录与event 表的记录连接(关联)来检索学生名、日期、学分和学分的类型。其结果如下所示:

您肯定注重到了,它与图1-4 中给出的表设计相同,而且不需要知道事件ID 就可得出这个结果,只需指出感爱好的日期并让MySQL 查找出哪个学分记录具有该日期即可。假如您一直担心抽象和分解会使我们损失一些东西的话,看到这个世界,就不会有这种担心了。 织梦好,好织梦
当然,在考虑过查询后,您还可能对其他别的东西产生担心。即,这个查询看上去有点长并且也有点复杂;是不是做了很多工作写出这样的东西只是为了查找某个给定日期的学分?是的,确实是这样。但是,在每次想要发布一个查询时,有几种方法可以避免键入多行的S Q L。一般情况下,一旦您决定如何执行这样一个查询并将它保存起来后,就可以按需要多次执行它。我们将在1 . 5节“与mysql 交互的技巧”中介绍怎样完成这项工作。
在上述查询的介绍中,我们有点超前了。不过,这个查询比起我们要实际用来得出学分的查询是有点简单了。原因是,我们还要对表的设计作更多的修改。我们将采用一个唯一的学生I D,而不在score 表中记录学生名。(即,我们将使用来自学分簿的“ I D”列的值而不是来自“ N a m e”列的值。)然后,创建另一个称为student 的表来存放name 和student_id 列(见图1 - 7)。

为什么要作出这种修改呢?只有一个原因,可能有两个学生有相同的名字。采用唯一的学生ID 号可帮助区分他们的学分。(这与利用唯一的事件ID 而不是日期来分辨出相同日期的测试或测验完全类似。)在对表的设计作了这样的修改后,实际用来获得给定日期的学分查询变得更为复杂了一些,这个查询如下:
内容来自dedecms


假如您不能立即清楚地读懂这个查询的意思的话,也不必担心。在进一步深入这个教程之后,就能看懂这个查询了。将会从图1 - 7中注重到,在student 表中增加了点学分簿中没有的东西。它包含了一个性别列。这便可以做一些简单的事情,如对班级中男孩和女孩的人数计数;也可以做一些更为复杂的事情,如比较男孩和女孩的学分。我们已经设计完了学分保存的几乎所有的表。现在只需要另外
一个表来记录出勤情况即可。这个表的内容相对较为直观,即,一个学生ID 号和一个日期(见图1 - 8)。表中的每行表示特定的学生在
给定的日期缺勤。在学分时段末,我们将调用MySQL 的计数功能来汇总此表的内容,以便得出每个学生的缺勤数。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息