Freigeben über


Implizite Beziehungen zwischen geschachtelten Schemaelementen zuordnen

Ein XSD-Schema (XML Schema Definition Language) kann komplexe Typen enthalten, die ineinander geschachtelt sind. In diesem Fall wendet der Zuordnungsprozess die Standardzuordnung an und erstellt folgende Elemente im DataSet:

  • Eine Tabelle für jeden der komplexen Typen (übergeordnet und untergeordnet).

  • Wenn keine eindeutige Einschränkung für das übergeordnete Element vorhanden ist, wird eine zusätzliche Primärschlüsselspalte pro Tabellendefinition mit dem Namen TableName_Id hinzugefügt, wobei TableName der Name der übergeordneten Tabelle ist.

  • Eine Primärschlüsseleinschränkung für die übergeordnete Tabelle, die die zusätzliche Spalte als Primärschlüssel identifiziert (durch Festlegen der IsPrimaryKey Eigenschaft auf True). Die Einschränkung trägt den Namen "Constraint#", wobei # für 1, 2, 3 usw. steht. Der Standardname für die erste Einschränkung lautet z. B. Constraint1.

  • Eine Fremdschlüsseleinschränkung für die untergeordnete Tabelle, die die zusätzliche Spalte als den auf den Primärschlüssel der übergeordneten Tabelle verweisenden Fremdschlüssel identifiziert. Die Einschränkung wird ParentTable_ChildTable benannt, wobei ParentTable der Name der übergeordneten Tabelle und ChildTable der Name der untergeordneten Tabelle ist.

  • Eine Datenbeziehung zwischen übergeordneten und untergeordneten Tabellen.

Das folgende Beispiel zeigt ein Schema, bei dem OrderDetail es sich um ein untergeordnetes Element von Order handelt.

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

Der XML-Schemazuordnungsprozess erstellt Folgendes im DataSet:

  • Eine Order und eine OrderDetail Tabelle.

    Order(OrderNumber, EmpNumber, Order_Id)
    OrderDetail(OrderNo, ItemNo, Order_Id)
    
  • Eine eindeutige Einschränkung für die Order Tabelle. Beachten Sie, dass die IsPrimaryKey Eigenschaft auf True festgelegt ist.

    ConstraintName: Constraint1
    Type: UniqueConstraint
    Table: Order
    Columns: Order_Id
    IsPrimaryKey: True
    
  • Eine Fremdschlüsseleinschränkung für die OrderDetail Tabelle.

    ConstraintName: Order_OrderDetail
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: Order_Id
    RelatedTable: Order
    RelatedColumns: Order_Id
    
  • Eine Beziehung zwischen den Order- und OrderDetail-Tabellen. Die Nested-Eigenschaft für diese Beziehung ist auf True gesetzt, weil die Order- und OrderDetail-Elemente im Schema geschachtelt sind.

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

Siehe auch