在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>  


 

sql server中的外键约束

Author:David EulerDate: 2004/10/16Email:de_euler-david@yahoo.com.cn 有任何问题,请与我联系:)sql server中建立外键约束有3...
  • davidullua
  • davidullua
  • 2004年10月16日 16:24
  • 5861

MySQL 查看数据库中有主外键关系的表信息 2

转载自:http://blog.itpub.net/28602568/viewspace-1711771/ SQL:      SELECT C.TABLE_SCHEMA       ...
  • ge_zhiqiang
  • ge_zhiqiang
  • 2016年08月04日 10:23
  • 2439

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

---添加主键约束               alter table 表名          add constraint 约束名 primary key (主键)             ...
  • abc456456456456
  • abc456456456456
  • 2014年11月02日 19:43
  • 876

Hibernate 外键约束问题

Hibernate 配置中, 对于有 1 对多的外键约束关系, 如果把inverse 属性设置反了的话 ,就有可能找不到 出现找不到主键的错误比如一太机器对应多个  岗位的问题Machine.hbm....
  • tgh_china
  • tgh_china
  • 2007年07月26日 22:03
  • 5367

Oracle 查看一个表对应的主键和外键的约束关系,查看的语句:

记录在表:user_constraints
  • han_dongwei
  • han_dongwei
  • 2014年11月06日 22:33
  • 5454

Oracle查询数据库主外键关系

select user_cons_columns.constraint_name as 约束名,          user_cons_columns.table_name      as 子表名,...
  • bubaxiu
  • bubaxiu
  • 2014年12月04日 09:11
  • 726

使用SQL语句设置和解除外键约束

设置外键约束的SQL语句:  alter table 需要建立外键的表 add constraint 外键名字 foreign key(外键字段)  references 外键表(被别的表引为外键的...
  • limuzi13
  • limuzi13
  • 2015年02月05日 10:49
  • 6693

关于数据库 约束或主外键约束的插入失败问题

在数据库里面,为了保证数据的有效和一致,通常都会在不同的表之间建立外键约束。这样虽然达到保证一致性的要求,但是如果需要清理数据或者初始化数据就会遇到麻烦,不根据表的外键约束得出表的主从关系当然不能随便...
  • qwezhaohaihong
  • qwezhaohaihong
  • 2017年11月21日 14:52
  • 209

mysql建立外键约束

MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个条件 1.两个表必须是InnoDB数据引擎 2.使用在外键关系的域必须为索引型(Index) 3.使用在外键关系的域必须与...
  • lcg910978041
  • lcg910978041
  • 2016年07月25日 18:11
  • 404

总结mysql的三种外键约束方式

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常...
  • qq_34123420
  • qq_34123420
  • 2016年09月13日 23:11
  • 7064
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在XML中如何实现主外键约束关系
举报原因:
原因补充:

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