Compartir a través de


Mapear relaciones implícitas entre elementos de esquema anidados

Un esquema del lenguaje de definición de esquemas XML (XSD) puede tener tipos complejos anidados entre sí. En este caso, el proceso de asignación aplica la asignación predeterminada y crea lo siguiente en el DataSet:

  • Una tabla para cada uno de los tipos complejos (padre e hijo).

  • Si no existe ninguna restricción única en el elemento primario, una columna de clave principal adicional por definición de tabla denominada TableName_Id donde TableName es el nombre de la tabla primaria.

  • Restricción de clave principal en la tabla primaria que identifica la columna adicional como clave principal (estableciendo la IsPrimaryKey propiedad en True). La restricción se denomina Constraint# donde # es 1, 2, 3, etc. Por ejemplo, el nombre predeterminado de la primera restricción es Constraint1.

  • Una restricción de clave externa en la tabla secundaria que identifica la columna adicional como clave externa que hace referencia a la clave principal de la tabla primaria. La restricción se denomina ParentTable_ChildTable donde ParentTable es el nombre de la tabla primaria y ChildTable es el nombre de la tabla secundaria.

  • Relación de datos entre las tablas padre e hijo.

En el ejemplo siguiente se muestra un esquema donde OrderDetail es un elemento secundario de 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="Order">
         <xs:complexType>
          <xs:sequence>
            <xs:element name="OrderNumber" type="xs:string" />
            <xs:element name="EmpNumber" type="xs:string" />
            <xs:element name="OrderDetail">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="OrderNo" type="xs:string" />
                  <xs:element name="ItemNo" type="xs:string" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
         </xs:complexType>
       </xs:element>
     </xs:choice>
   </xs:complexType>
  </xs:element>
</xs:schema>

El proceso de asignación de esquemas XML crea lo siguiente en dataSet:

  • Un Order y una OrderDetail tabla.

    Order(OrderNumber, EmpNumber, Order_Id)
    OrderDetail(OrderNo, ItemNo, Order_Id)
    
  • Restricción única en la Order tabla. Tenga en cuenta que la IsPrimaryKey propiedad está establecida en True.

    ConstraintName: Constraint1
    Type: UniqueConstraint
    Table: Order
    Columns: Order_Id
    IsPrimaryKey: True
    
  • Restricción de clave externa en la tabla OrderDetail.

    ConstraintName: Order_OrderDetail
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: Order_Id
    RelatedTable: Order
    RelatedColumns: Order_Id
    
  • Relación entre las tablas Order y OrderDetail. La propiedad Nested de esta relación se establece en True porque los elementos Order y OrderDetail están anidados en el esquema.

    ParentTable: Order
    ParentColumns: Order_Id
    ChildTable: OrderDetail
    ChildColumns: Order_Id
    ParentKeyConstraint: Constraint1
    ChildKeyConstraint: Order_OrderDetail
    RelationName: Order_OrderDetail
    Nested: True
    

Consulte también