在XML中如何实现主外键约束关系

转载 2007年09月26日 13:36:00

查了下相关资料,目前有两种实现方式,1是通过DTD,2是Schema

1 DTD作为XML的一种老结构描述方式,采用的不同于XML的语法规则,而且不支持数据类型,基本被淘汰,在此不议 。

2 Schema是完善了DTD的不足,以下是实现方式,相信有些简单基础的朋友都能看明白:

如果曾经尝试用   DTD   来描述具有复杂关系映射的关系数据库,那么好象必须使用   ID-IDREF指向机制。例如,在一个结构中,两个实体通过一张关系表表示相互联系的多对多关系(例如,BBS论坛应用中用户和帖子),简单的   XML   父子关系是不够的。然而,ID   和   IDREF   有其自身弱点:在整个文档中,ID   必须是唯一的,并且   IDREF   声明没有指定   IDREF   属性的实例必须引用的元素类型。XML   Schema,提供了一种与关系数据库中声明的外键关系几乎相同的方式来指定这些指向关系。例如,BBS论坛中用户表与帖子表有一个外键关系,该外键关系不能用XML中简单的父子关系来表达。  
   
  key,keyref示例:bbs.xsd  
  在   PubUser   元素的复合类型中的键定义声明了   nUserID   属性必须出现在所有   nUserID   元素中,并且在   PubUser   元素上的所有   nUserID   属性中它必须是唯一的(注意,这与   ID   不同,无论与该元素相关的是什么元素,该   ID   是唯一的)。然后,在   BbsThread   元素的复合类型中的   keyref   定义声明了   nUserID   字段必须与文档中的   PubUser   元素的   nUserID   字段之一到处相匹配。这种键机制的另一好的特性是,该键可能是强类型   -与   ID   和   IDREF   相反,它们必须是   XML   名称标记   -所以您可以在表中不加修改地使用自动递增的主键。定义组合键以便创建主键(用   key   元素)和外键(用   keyref   元素)也是可能的,这些键直接映射到现有关系数据库中出现的主键(或外键)。  
   
   
   
  bbs.xsd  
  <?xml   version="1.0"   encoding="utf-8"?>  
  <xsd:schema   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   elementFormDefault="qualified"   attributeFormDefault="unqualified">  
      <xsd:element   name="moonpiazza">  
          <xsd:complexType>  
              <xsd:sequence>  
                  <xsd:element   name="PubUser"   maxOccurs="unbounded">  
                      <xsd:complexType>  
                          <xsd:attribute   name="nUserID"   type="xsd:int"/>  
                          <xsd:attribute   name="cUserName"   type="xsd:string"/>  
                      </xsd:complexType>  
                      <xsd:key   name="PubUserPK"> -->   定义键   PubUserPK  
                          <xsd:selector   xpath=".//PubUser"/> -->   指明元素路径  
                          <xsd:field   xpath="@nUserID"/> -->   指明元素名称  
                      </xsd:key>  
                  </xsd:element>  
                  <xsd:element   name="BbsThread"   maxOccurs="unbounded">  
                      <xsd:complexType>  
                          <xsd:attribute   name="nBbsThreadID"   type="xsd:int"/>  
                          <xsd:attribute   name="nUserID"   type="xsd:int"/>  
                          <xsd:attribute   name="cThreadTitle"   type="xsd:string"/>  
                      </xsd:complexType>  
                      <xsd:key   name="BbsThreadPK"> -->   定义键  
                          <xsd:selector   xpath=".//BbsThread"/>  
                          <xsd:field   xpath="@nBbsThreadID"/>  
                      </xsd:key>  
                      <xsd:keyref   name="BbsThreadFK"   refer="PubUserPK"> -->定义键BbsThreadFK,refer指明映射到键PubUserPK  
                          <xsd:selector   xpath=".//BbsThread"/> -->   指明元素路径  
                          <xsd:field   xpath="@nUserID"/> -->   指明元素名称  
                      </xsd:keyref>  
                  </xsd:element>  
              </xsd:sequence>  
          </xsd:complexType>  
      </xsd:element>  
  </xsd:schema>  


 

相关文章推荐

oracle查看主外键约束关系

  • 2015年09月21日 15:46
  • 11KB
  • 下载

Oracle12C--主外键约束删除数据问题--级联操作(九)

知识点的梳理: on delete cascade:当主表数据删除时,对应的子表数据同时删除; on delete set null:当主表数据删除时,对应的子表数据设置为null; 问题1:删...

浅谈主外键约束

很久之前,就一直再看主外键的文章,然而从来没有写出一篇博客来对他们进行总结。迄今,尽管看了不少资料,令我汗颜的事是:有些文章所说的关于主外键的知识,我仍然不知所云,更别谈判断他们的对错。   之前...

SQL server添加主外键约束 sql语句

---添加主键约束               alter table 表名          add constraint 约束名 primary key (主键)             ...

SQL 数据库 学习 008 如何通过图形化界面建表 和 建主外键约束

在库里面建表。所以我们现在需要先新建一个库,然后在库里面新建一个表。所以,先建一个 库 ,取名为:test输入新建库的名字:test 。 现在点击 确定 按钮。 如果你在创建库的时候,遇到了下面这...

数据库建表时一定要设置外键约束关系吗?

数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键。而在关系数据库中,常常有两表存在一定关系的情况。即一张表的主键跟另一张的外键存在...

oracle外键约束的实现

在主表记录发生变化导致外键参考的唯一约束值发生相应变化时,有如下处理方式: 限制(Restrict):主表记录发生变化(删除、更新)时,如果子表中存在相应外键值,则不允许删除。oracle实现时会报...

用触发器实现SQLite的外键约束

用sqlite的触发器实现删除时,要关闭外键,要不然会有出现删不了外键对应键的情况。 http://hanover.iteye.com/blog/585749     最近在做数码...

一个通用的单元测试框架的思考和设计06-实现篇-自动管理测试数据-如何临时关闭数据外键约束

第4节中提出了通过dbunit插件来自动管理测试数据,但是在实际操作时发现了一些问题,在设计数据库表时各个表之间可能存在外键关联,在我们准备测试数据库时经常会遇到因外测试数据外键问题导致无法插入数据或...

经典SQL语句大全_主外键_约束

  • 2011年12月13日 18:06
  • 123KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在XML中如何实现主外键约束关系
举报原因:
原因补充:

(最多只允许输入30个字)