400 likes | 557 Views
4.1. 4.3. 4.2. 图书管理 —— 一对多关系. 图书管理 —— 多对多关系. 分组查询和动态图表. 第 4 章 ASP 访问数据库(二). 4.1 图书管理 —— 一对多关系. 4.1.1 一对多关系概述 下面用一个实例来说明什么是 “ 一对多 ” 关系。 这是一个简单的图书管理系统。包括图书信息和作者信息。图书信息包括:编号、书名、出版时间、内容简介等;作者信息包括:姓名、性别、国籍、生卒年份等。.
E N D
4.1 4.3 4.2 图书管理——一对多关系 图书管理——多对多关系 分组查询和动态图表 第4章 ASP访问数据库(二)
4.1 图书管理——一对多关系 • 4.1.1 一对多关系概述 • 下面用一个实例来说明什么是“一对多”关系。 • 这是一个简单的图书管理系统。包括图书信息和作者信息。图书信息包括:编号、书名、出版时间、内容简介等;作者信息包括:姓名、性别、国籍、生卒年份等。
如果在数据库中只建立一个表,把图书信息和作者信息都放在里面,就有可能造成大量存储空间的浪费。比如,某个作者写了很多本书,这些书的作者信息就是相同的,这不仅浪费存储空间;也不便于修改维护,如果要修改他的信息,就要改动他的每一本书的记录,这就非常不方便。如果在数据库中只建立一个表,把图书信息和作者信息都放在里面,就有可能造成大量存储空间的浪费。比如,某个作者写了很多本书,这些书的作者信息就是相同的,这不仅浪费存储空间;也不便于修改维护,如果要修改他的信息,就要改动他的每一本书的记录,这就非常不方便。
另外,可能只有一部分图书有作者信息,另一部分图书根本没有作者的信息,这部分图书的作者信息部分就全是空字段,这是造成存储空间浪费的另一个原因。另外,可能只有一部分图书有作者信息,另一部分图书根本没有作者的信息,这部分图书的作者信息部分就全是空字段,这是造成存储空间浪费的另一个原因。
所以,要分成两个表来建立:图书信息表与作者信息表。这样,不仅节约存储空间,在作者信息变动时,只需修改一条记录就可以了。所以,要分成两个表来建立:图书信息表与作者信息表。这样,不仅节约存储空间,在作者信息变动时,只需修改一条记录就可以了。
现假定每一本书只有一个作者,但一个作者可能写了若干本书。这就是所谓“一对多”的关系。现假定每一本书只有一个作者,但一个作者可能写了若干本书。这就是所谓“一对多”的关系。 • 为了突出主要问题,对表的结构做了简化,仅保留了少量的字段。 • (1)图书信息表(books)的结构设计如图4-1-1所示。
(2)作者信息表(writers)结构设计如图4-1-2所示。(2)作者信息表(writers)结构设计如图4-1-2所示。
(3)图书信息表的内容如图4-1-3所示。 图4-1-3 图书信息表的内容
(4)作者信息表的内容如图4-1-4所示。 图4-1-4 作者信息表的内容
为了简单起见,这里假设作者的中文名字是没有重名的。这样就直接使用中文姓名作为作者表的主关键字段。对于没有详细信息的作者,作者表中就根本没有他的记录。为了简单起见,这里假设作者的中文名字是没有重名的。这样就直接使用中文姓名作为作者表的主关键字段。对于没有详细信息的作者,作者表中就根本没有他的记录。
4.1.2 项目实现 • 1.案例效果 • 2.制作过程 • (1)首页(index.htm) • (2)“检索结果”网页(fbook.asp) • (3)“详细信息”网页(detail.asp)
3.知识解析 • (1)LEFT JOIN • (2)INNER JOIN • (3)显示图片时条件语句的应用 • (4)相关图书——即同一作者的其他图书
4.2 图书管理——多对多关系 • 4.2.1 多对多关系概述 • 前面所讲的“一对多”关系,是假设每一本书只有一个作者,但一个作者可能写了多本书。实际上,不仅一个作者可能有多本书,一本书也可能有多个作者。这就是所谓“多对多”关系了。
下面仍然以图书管理系统为例。在这个例子里,除了图书信息表(books)与作者信息表(writers)之外,还有一个起“中介”作用的关系表(rel),图书与作者之间的关系,全部保存在这个表中。下面仍然以图书管理系统为例。在这个例子里,除了图书信息表(books)与作者信息表(writers)之外,还有一个起“中介”作用的关系表(rel),图书与作者之间的关系,全部保存在这个表中。
(1)图书信息表的结构设计,表中没有“作者”字段,如图4-2-1所示。(1)图书信息表的结构设计,表中没有“作者”字段,如图4-2-1所示。
(2)作者信息表结构设计,主关键字段不是姓名,而是作者编号。这样做,即使作者中有同名同姓的也不会搞错。如图4-2-2所示。(2)作者信息表结构设计,主关键字段不是姓名,而是作者编号。这样做,即使作者中有同名同姓的也不会搞错。如图4-2-2所示。
(3)关系表的设计,如图4-2-3所示。 图4-2-3 关系表(rel)结构设计
“多对多”的关系就是通过这个表(rel)来确定图书与作者之间的相互联系,如图4-2-4所示。“多对多”的关系就是通过这个表(rel)来确定图书与作者之间的相互联系,如图4-2-4所示。
4.2.2 项目实现 • 1.案例效果 • 2.制作过程 • (1)“检索结果”页(fbook.asp)。 • (2)“详细信息”页(detail.asp)。
3.知识解析 • (1)SQL查询语句中使用了两次“LEFT JOIN”: • rs.Open "SELECT * FROM books LEFT JOIN (rel LEFT JOIN writers " _ • & " ON rel.writerID = writers.wID) ON books.bID = rel.bookID" & s1 _ • & " ORDER BY bID" ,cn,1
由于有3个表,所以用了两次“LEFT JOIN”。之所以用“LEFT JOIN”而不是“INNER JOIN”,是考虑到可能有的图书没有作者,或不知道有没有作者,而图书本身仍然能够被正常地检索。
(2)检索结果页同一本书多条记录的处理 • (3)详细信息页在显示图书信息时如何显示多个作者 • (4)一本书多名作者的排名顺序问题 • (5)作者详细信息的显示 • (6)检索相关图书
4.3 分组查询和动态图表 • 4.3.1 分组查询 • 1.GROUP BY子句 • 2.HAVING子句 • 3.分组查询常用的SQL函数
(1)函数COUNT( )统计非NULL值记录数。 • (2)函数SUM( )计算某字段的算术和。 • (3)函数AVG( )计算某字段的算术平均值。
(4)函数MAX( )返回某字段中的最大值。 • (5)函数MIN( )返回某字段中的最小值。
4.3.2 动态图表 • 动态图表是网页中能够随着数据库中数据的变化而变化的图表(直方图、折线图、圆饼图等)。可以利用ActiveX控件或Java Applet等技术来实现。
使用ActiveX控件显示动态图表,对客户端(浏览器端)的平台有一定要求:CPU必须是x86体系(如奔腾)、操作系统必须是Windows、浏览器软件必须是微软的IE(Internet Explorer)。
这意味着Linux用户可能无法看到网页中的动态图表。另外,有些客户为了预防“病毒”,在浏览器的“安全”设置中“禁用”了ActiveX控件,这意味着部分Windows用户也看不到网页中的动态图表。这意味着Linux用户可能无法看到网页中的动态图表。另外,有些客户为了预防“病毒”,在浏览器的“安全”设置中“禁用”了ActiveX控件,这意味着部分Windows用户也看不到网页中的动态图表。
使用Java Applet技术显示动态图表,与平台无关。Linux系统的客户端也可以看到动态图表。但Java程序设计并非每个网页开发人员都能够胜任。
也可以使用Flash技术显示动态图表。这需要开发人员有利用Flash MX ActionScript进行程序设计的能力。
网页中最常见的动态图表是直方图(条形图和柱形图),它最容易实现,实际使用的也最多。在ASP网页中,不需要其他的技术,只用ASP的VBScript编写简单程序,就可以实现动态直方图。下面的例子将介绍ASP如何实现动态直方图。网页中最常见的动态图表是直方图(条形图和柱形图),它最容易实现,实际使用的也最多。在ASP网页中,不需要其他的技术,只用ASP的VBScript编写简单程序,就可以实现动态直方图。下面的例子将介绍ASP如何实现动态直方图。
4.3.3 项目实现 • 1.案例效果 • 2.制作过程 • (1)网上调查数据表结构设计如图4-3-4所示。
(2)条形图形的制作。 • (3)网上调查首页(index.htm)是一个没有服务器端脚本的普通网页。 • (4)调查投票接收页(vote.asp)。 • (5)投票结果显示页(look.asp)。
3.知识解析 • (1)分组查询——GROUP BY • (2)Session和Cookies技术 • (3)修改网上调查首页 • (4)动态条形图形的宽度——动态系数K • (5)条形图形的颜色