本文讲述了模式演化对应用程序的影响,并通过使用情景向用户说明设置 PHP 环境的容易程度;将DB2原生XML 功能与PHP应用程序(包括用PHP和 XQuery编写的Web服务)集成的容易程度。
创建主页
主页包含在线商店中所有可用产品的种类和品牌的索引。索引的右边区域显示所有货品的列表。
图 5. 主页
创建种类和品牌的索引列表
索引通过查询数据库中所有产品的惟一种类和品牌的列表而创建。启动应用程序时将创建此列表。
DB2 Viper
- 首先创建 DB2 视图,以使用 XQuery 列出种类,XQuery 在所有产品中循环并返回所有惟一种类:
CREATE VIEW Categories(Category) AS SELECT DISTINCT(XMLCAST( XMLQUERY(for $i in $t/product/description/category return $i' PASSING BY REF T.DESCRIPTION AS "t" RETURNING SEQUENCE) AS VARCHAR(128))) FROM xmlproduct AS t |
- 现在从应用程序调用该视图:
$stmt = db2_exec($conn, "SELECT * FROM Categories"); while(list($cat) = db2_fetch_array($stmt)) { echo "$cat "; } |
非 XML RDBMS 从产品表创建种类的惟一列表:
$stmt = db2_exec($conn, "SELECT DISTINCT(category) FROM SQLPRODUCT"); while(list($cat) = db2_fetch_array($stmt)) { echo " $cat ";} |
这两种情况中的应用程序代码相似。创建 XML 数据视图使我们可以轻松地查询视图,从而有助于从应用程序代码理解产品 XML 的结构。需要更改视图中的 XQuery 以查找品牌元素,同样 SQL 调用也需要查看 Brand 列。
模式演化对索引列表的影响
根据客户反馈,我们需要允许用户浏览站点,以查找镀银的货品或由纯银制造的货品。我们看一下向索引中添加子种类对以下各项的影响:XML 模式、关系模式、查询和 PHP 应用程序代码。
对 XML 模式和文档实例的影响 向产品 XML 模式中的种类元素添加新属性(catx)。产品的所有新 XML 文档现在都用纯银或镀银适当地填充了此属性:
Miscellaneous 对关系模式的影响
- DB2 Viper
这将不需要对关系模式进行任何更改,因为 XML 文档存储在单个列中。
- 非 XML RDBMS
在基本关系数据库中,将需要更改产品表的模式,添加名为 catx 的另一列。这可能涉及删除并重新插入所有产品文档。
对查询的影响
- DB2 Viper 创建索引所需的 XQuery 将发生变化以在条件中包含这个新属性。同样,用于根据索引中的选择列出货品 XQuery 也将发生变化来包括新条件。
- 非 XML RDBMS
插入语句将发生变化以包括新列。
创建索引所需的查询将发生变化以在 WHERE 子句中包括这个新列。同样,用于根据索引中的选择列出货品的查询也将发生变化以包括新条件。
对应用程序代码的影响
- DB2 Viper
应用程序代码将没有任何更改。
- 非 XML RDBMS
- 将需要额外的 DOM 代码,以分割出子种类信息。
- INSERT 语句将需要额外的参数。
- 所有数据都有可能需要重新插入,这导致终端用户有一段时间无法操作。