Compartir a través de


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

El keyref elemento 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, este se convierte durante el proceso de asignación de esquema en una restricción correspondiente de clave externa en las columnas de las tablas de DataSet. De forma predeterminada, el keyref elemento 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 msdata atributos que puede especificar en el keyref elemento .

Nombre del atributo Descripción
msdata:ConstraintOnly Si ConstraintOnly="true" se especifica en el elemento del keyref 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 ConstraintName atributo , su valor se usa como nombre de la restricción. De lo contrario, el name atributo del keyref elemento en el esquema proporciona el nombre de restricción en dataSet.
msdata:UpdateRule Si el UpdateRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la UpdateRule propiedad constraint de DataSet. De lo contrario, la UpdateRule propiedad se establece en Cascade.
msdata:DeleteRule Si el DeleteRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la DeleteRule propiedad constraint de DataSet. De lo contrario, la DeleteRule propiedad se establece en Cascade.
msdata:AcceptRejectRule Si el AcceptRejectRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la AcceptRejectRule propiedad constraint de DataSet. De lo contrario, la AcceptRejectRule propiedad se establece en None.

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

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

<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 lo siguiente DataSet con dos tablas:

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

Además, DataSet define las restricciones siguientes:

  • Restricción única en la Order tabla.

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Relación entre las tablas Order y OrderDetail. La propiedad Nested se establece en 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