Compartir a través de


Asignar restricciones KEYREF de un esquema XML (XSD) a restricciones de conjuntos de datos

El elemento keyref permite establecer vínculos entre elementos dentro de un documento. Esto es similar a una relación de clave externa en una base de datos relacional. Si un esquema especifica el elemento keyref, durante el proceso de asignación del esquema el elemento se convertirá en una restricción de clave externa correspondiente en las columnas de las tablas del DataSet. De forma predeterminada, el elemento keyref también genera una relación, con las propiedades ParentTable, ChildTable, ParentColumn y ChildColumn especificadas en la relación.

En la tabla siguiente se describen los atributos msdata que puede especificar en el elemento keyref .

Nombre del atributo Descripción
msdata:ConstraintOnly Si ConstraintOnly="true" se especifica en el elemento keyref del esquema, se crea una restricción, pero no se crea ninguna relación. Si no se especifica este atributo (o se establece en False), tanto la restricción como la relación se crean en el DataSet.
msdata:ConstraintName Si se especifica el atributo ConstraintName , su valor se usa como nombre de la restricción. De lo contrario, el atributo name del elemento keyref del esquema proporciona el nombre de restricción en dataSet.
msdata:UpdateRule Si el atributo UpdateRule se especifica en el elemento keyref del esquema, su valor se asigna a la propiedad de restricción UpdateRule en dataSet. De lo contrario, la propiedad UpdateRule se establece en Cascade.
msdata:DeleteRule Si el atributo DeleteRule se especifica en el elemento keyref del esquema, su valor se asigna a la propiedad de restricción DeleteRule en dataSet. De lo contrario, la propiedad DeleteRule se establece en Cascade.
msdata:AcceptRejectRule Si el atributo AcceptRejectRule se especifica en el elemento keyref del esquema, su valor se asigna a la propiedad de restricción AcceptRejectRule en dataSet. De lo contrario, la propiedad AcceptRejectRule se establece en None.

El siguiente ejemplo contiene un esquema que especifica las relaciones de clave y clave de referencia entre el elemento hijo OrderNumber del elemento Order y el elemento hijo OrderNo del elemento OrderDetail.

En el ejemplo, el elemento secundario OrderNumber del elemento OrderDetail hace referencia al elemento secundario de clave OrderNo del elemento Order .

<xs:schema id="MyDataSet" xmlns=""
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
  
 <xs:element name="MyDataSet" msdata:IsDataSet="true">  
  <xs:complexType>  
    <xs:choice maxOccurs="unbounded">  
      <xs:element name="OrderDetail">  
       <xs:complexType>  
         <xs:sequence>  
           <xs:element name="OrderNo" type="xs:integer" />  
           <xs:element name="ItemNo" type="xs:string" />  
         </xs:sequence>  
       </xs:complexType>  
      </xs:element>  
      <xs:element name="Order">  
        <xs:complexType>  
          <xs:sequence>  
            <xs:element name="OrderNumber" type="xs:integer" />  
            <xs:element name="EmpNumber" type="xs:integer" />  
          </xs:sequence>  
        </xs:complexType>  
      </xs:element>  
    </xs:choice>  
  </xs:complexType>  
  
  <xs:key name="OrderNumberKey"  >  
    <xs:selector xpath=".//Order" />  
    <xs:field xpath="OrderNumber" />  
  </xs:key>  
  
  <xs:keyref name="OrderNoRef" refer="OrderNumberKey">  
    <xs:selector xpath=".//OrderDetail" />  
    <xs:field xpath="OrderNo" />  
  </xs:keyref>  
 </xs:element>  
</xs:schema>  

El proceso de asignación de esquemas del lenguaje de definición de esquemas XML (XSD) genera el siguiente conjunto de datos con dos tablas:

OrderDetail(OrderNo, ItemNo) and  
Order(OrderNumber, EmpNumber)  

Además, DataSet define las restricciones siguientes:

  • Restricción única en la tabla Order .

              Table: Order  
    Columns: OrderNumber
    ConstraintName: OrderNumberKey  
    Type: UniqueConstraint  
    IsPrimaryKey: False  
    
  • Relación entre las tablas Order y OrderDetail . La propiedad Nested se establece como False porque los dos elementos no están anidados en el esquema.

              ParentTable: Order  
    ParentColumns: OrderNumber
    ChildTable: OrderDetail  
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey  
    ChildKeyConstraint: OrderNoRef  
    RelationName: OrderNoRef  
    Nested: False  
    
  • Restricción de clave externa en la tabla OrderDetail .

              ConstraintName: OrderNoRef  
    Type: ForeignKeyConstraint  
    Table: OrderDetail  
    Columns: OrderNo
    RelatedTable: Order  
    RelatedColumns: OrderNumber
    

Consulte también