使用XForms 和 Ruby on Rails开发小型门诊管理系统,第1部分 - 编程入门网
时间:2011-11-29 ibm Michael Galpin
DB2 9 pureXML 如果曾经开发过使用 XML 的应用程序,很可能已经使用过两种常见的 持久 XML 数据到数据库技术中的一种。第一种技术是使用某种 XML 关系映射技术。这种技术通常需要自 己编写自定义的应用程序逻辑从 XML 文档中提取数据,然后放到关系数据库的表列中。通常被称为切割 (shredding)。当然如果以后需要再次读取数据,还需要能够 “反切割” 并重新组装成 XML 文档。 另一种常见的技术是直接把 XML 文档转储到数据库的 CLOB 列中。实际上就是把 XML 看成是一个很长的字符串。此后就可以从数据库中读出,传递给解析器重建 XML 文档。一般来说这种办 法要容易得多,因为不需要编写什么切割/反切割代码,但是功能差一些。没有非常有效的办法查询 XML 文档中的数据。 近年来 XML 数据库日渐普及,就是因为解决了这类问题。允许按照 XML 存储数据,因此不需要切割 。同时又能使用 XQuery 高效查询,因此不会损失文档的结构。支持这种功能的多数数据库是小型的专用 数据库,不过现在可以把 IBM 的旗舰数据库 DB2 添加到原生 XML 数据库的名单中了。 使用 DB2 可以在数据库中存储与 XForms 使用的 XML 相同的数据。不需要切割、映射或者解析数据。浏览器中的 数据 “方言” 和数据库使用的方言一样。DB2 支持在 SQL 查询中使用 XQuery,称为 SQL/XML,因此可以方便地访问 XML 文档中的任何数据。比方说,假设需要使用患者的姓检索信息。可以 将这些信息存储在 XML 文档中,编写 XQuery 根据患者的姓氏检索文档。我们来进一步看看 DB2 是如何 做到的。 DB2 设置 现在需要设置 DB2,创建使用原生 XML 的表。和其他 XML 数据库相比 ,DB2 的一个优点是允许混合关系数据和 XML 数据。不需要非此即彼的选择,可以同时使用。因而不需 要直接把 XML 文档映射到表,可以映射到列。表中给定的一行甚至可以包含多个 XML 文档。 可 以通过两种不同的方法创建使用 XML 的新表。最简单的办法是使用命令行。清单 1 中的脚本创建只含一 个 XML 列的表。 清单 1. 创建包含一个 XML 列的表 CREATE TABLE DOC.PATIENTS ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( START with +1 INCREMENT BY +1), INFORMATION XML NOT NULL); 该例中的 INFORMATION 列的类型为 XML。可以看到,语法非常简 单,和声明整数列或者 varchar 列没有什么区别。如果不喜欢使用命令行创建表,DB2 Command Center 提供了图形化的方式。可以使用它提供的创建表向导,如图 1 所示。 图 1. 启动创建表向导 使用XForms 和 Ruby on Rails开发小型门诊管理系统,第1部分(3)时间:2011-11-29 ibm Michael Galpin单击 Create New Table 启动向导。打开图 2 所示的表名信息屏幕。 图 2. 命名表 命名新表的屏幕允许指 定表的模式和表名。单击 Next 打开 Columns definition 界面,如图 3 所示。 图 3. 定义新表 的列 单击 Add 按钮打开 Add Column 对话框,如图 4 所示。 图 4. Add column 对话框 使用XForms 和 Ruby on Rails开发小型门诊管理系统,第1部分(4)时间:2011-11-29 ibm Michael Galpin这就是关键的地方了。 要定义保存 XML 数据的列,必须把数据类型指定为 XML。仅此而已!向导的数据类型列表中已经包含 XML,没有什么特殊的地方。完成后单击 OK 将看到定义的 XML 列,如图 5 所示。 图 5. 增加的 XML 列 通 过向导还可以添加更多的列、主键和外键等等。然后单击 Finish,表就创建好了。 无论用哪种方 法创建表,都可用 SQL 向表中插入数据。编写 SQL 的时候可以把 XML 视作字符串,如清单 2 所示。 清单 2. 插入 XML INSERT INTO DOC.PATIENT |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |