• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

一对多的关系很好。然而,它不允许我们表示在书到作者的假设中所需要的多对多的关系。提
醒一下,我们说过一本书可以有多个作者,并且一个作者可能写过许多书。为了实现这一点,
需要一个单独的表,除了我们试图建立的关系外什么都没有。
第10章XML和数据库使用371 下载
让我们假设有如下的作者表(参见表1 0 - 9):
表1 0 - 9
作者编号名姓简历
1 S t e p h e n M o h r ⋯⋯
2 K a t h i e K i n g s l e y - H u g h e s ⋯⋯
3 F r a n k B o u m p h r e y ⋯⋯
注意每一个作者有一个唯一数字—或主键—用来标识他们,就像货币符号那样,但是
在这个表中没有对书的引用。现在,证我们看一下书表(参见表1 0 - 1 0),对于每一本书也有一
个唯一的I D:
表1 0 - 1 0
书籍编号书名I S B N
1 XML Applications 1 - 8 6 1 0 0 1 - 5 2 - 5
2 Designing Distributed Applications with XML, ASP,IE5, LDAP and MSMQ 1 - 8 6 1 0 0 2 - 2 7 - 0
3 Professional Style Sheets for HTML and XML 1 - 8 6 1 0 0 1 - 6 5 - 7
再次注意,就像在作者表中没有对书表的引用一样,
这个表也没有对作者的引用。不像一对一和一对多关系
那样使用表的额外字段来实现,我们需要建立第三张表,
用来维护多对多的连接。这个额外表参见表1 0 - 11。
这个表只包含了其他两个表的关系。这个技术可以
被扩展,可以提供需要的更多表的关系。那么我们如何
从数据库中提取信息呢?为了找到Stephen Mohr所写的
所有书,我们将使用下面的S Q L语句:
程序清单1 0 - 9
并且,为了找到“XML Applications”这本书的作者,我们使用语句:
程序清单1 0 - 1 0
注意这些查询将这三个表进行了连接。第一个查询进行如下工作:
• 匹配B o o k A u t h o r. a u t h o r C i t e I D到A u t h o r. a u t h o r C i t e I D的W H E R E子句部分用来取得在
B o o k A u t h o r表提到的所有作者。
372使用XML 高级编程
下载
表1 0 - 11
B o o k I D a u t h o r C i t e I D
1 1
1 2
1 3
2 1
3 3
• LastName到‘M o h r’的比较部分用来将作者的列表缩小到Stephen Mohr。
• 在两个B o o k I D字段进行的比较查找S t e p h e n所写的书。
使用这个连接,我们可以提出关于书和它们到作者的关系的问题。完全的表的配置看上去
如图1 0 - 8所示。
图10-8
(6) RDBMS和X M L
让我们回到这一部分的中心议题上来;对于关系数据库所给出的这些特性,它们能够很好
地提供对X M L文档操作的高级功能吗?为了解决这个问题,我们需要检查关系数据库是如何模
拟节点信息的。
记起我们关于表的讨论,可以看到一行可以很容易地表示一个元素,用表的列来保存属性。
例如,在前面表配置图中的A u t h o r表很容易保存书目录的< A u t h o r >元素。
我们知道一些元素也包含文本属性,但是这个可以使用一个已命名的列进行摸拟,比如
P C D ATA。因为它有一个我们知道的名字,这样当进行输出时,不应该以一个属性被取出而应该
是作为元素。
书的目录中关于这一点的一个例子是< I m p r i n t >元素,看上去如:
在I m p r i n t表中的数据如图1 0 - 9表示:
在一个表中将元素映射成元素相当直接,但是只是完成了一半;我们仍然需要表示节点间
的关系。为了做到这一点,我们需要使用与在前面部分所看到的不同类型的连接。我们可以模
拟父亲/孩子关系,简单地通过在表中创建一个外键,用它来表示孩子,在表中用主键表示父亲。
例如,我们刚创建的I m p r i n t表可能被扩展成(参见图1 0 - 1 0):
其中f k _ I m p r i n t s字段是一个引用—或外键—做为父表I m p r i n t s的主键。这个表被提出面
向出版商为(参见图1 0 - 11)。
第10章XML和数据库使用373 下载
图10-9
图10-10
图10-11
(7) RDBMS的局限
刚看上去好像相当有用;父亲和孩子节点的分级表示可以通过设置从子表到父表的一种引
用来建立。然而,这里面有一个主要的问题,父/子关系太严格了。例如,用我们刚才提出的方
法,就不可能表示程序清单1 0 - 11所示的结构:
程序清单1 0 - 11
这是因为在类型C的元素与它的父亲之间的关系不是固定的;它可能有一个类型A的父亲也
可能有一个类型B的父亲。如果我们使用刚介绍的简单的主/外键技术,这个X M L结构将只能存
在或者这个父亲或者那个父亲。换句话说,类型C的元素将有一个到A表或到B表的外键,而不
是两个都有。
所以,尽管R D B M S用它的表结构在相当程度上模拟了节点,但它不能很好地处理这些节点
的关系。尽管这样说,我们不应该放弃将R D B M S作为存储X M L节点的机制。有很多的情况用这
类的数据库将表现得非常充分。实际上,正像我们在后面要看到的,书的目录的例子工作得很
好,因为这个模式不包括我们才提到的那种情况。
后面,我们将深入介绍如何将一个模式转化为一系列的表和关系。
(8) 产品
374使用XML 高级编程
下载
尽管R D B M S的安装库是很巨大的,但是在这一领域没有什么能与P O E T或e X c e l o n相比。下
面的产品可能是最先进的。我们列出了比较感兴趣的几个应用。
LivePage Corporation LivePage Enterprise 3.0
L i v e P a g e可以转化X M L到关系数据库。它通过在关系数据库上设置一个软件层来实现的,
它可以处理转入和转出。L i v e P a g e本身不是一个数据库,但是搭乘在下面其中一个产品的上面:
• IBM DB2 2.1或更新版
• Microsoft SQL Server 6.0或更新版
• Oracle SQL 7或更新版
• Sybase SQL Server 10和11
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(123)