Поделиться через


Сопоставление неявных связей между вложенными элементами схемы

Схема определения схемы XML (XSD) может содержать сложные типы, вложенные друг в друга. В этом случае процесс сопоставления применяет сопоставление по умолчанию и создает следующее в DataSet:

  • Одна таблица для каждого из сложных типов данных (родительского и дочернего).

  • Если в родительском элементе нет уникального ограничения, один дополнительный столбец первичного ключа для определения таблицы с именем TableName_Id где TableName — это имя родительской таблицы.

  • Ограничение первичного ключа родительской таблицы, определяющее дополнительный столбец в качестве первичного ключа (задав свойству IsPrimaryKeyзначение True). Ограничение называется Ограничение №#, где # – это 1, 2, 3 и т. д. Например, имя по умолчанию для первого ограничения — Constraint1.

  • Ограничение внешнего ключа дочерней таблицы, определяющее дополнительный столбец как внешний ключ, ссылающийся на первичный ключ родительской таблицы. Ограничение называется ParentTable_ChildTable , где ParentTable — это имя родительской таблицы и ChildTable — имя дочерней таблицы.

  • Отношение данных между родительскими и дочерними таблицами.

В следующем примере показана схема, в которой OrderDetail является дочерним элементом 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>  

Процесс сопоставления схемы XML создает следующий код в наборе данных:

  • Таблица Order и Таблица OrderDetail.

    Order(OrderNumber, EmpNumber, Order_Id)  
    OrderDetail(OrderNo, ItemNo, Order_Id)  
    
  • Уникальное ограничение таблицы Order . Обратите внимание, что для свойства IsPrimaryKey задано значение True.

    ConstraintName: Constraint1  
    Type: UniqueConstraint  
    Table: Order  
    Columns: Order_Id
    IsPrimaryKey: True  
    
  • Ограничение внешнего ключа для таблицы OrderDetail .

    ConstraintName: Order_OrderDetail  
    Type: ForeignKeyConstraint  
    Table: OrderDetail  
    Columns: Order_Id
    RelatedTable: Order  
    RelatedColumns: Order_Id
    
  • Связь между таблицами Order и OrderDetail . Вложенное свойство этой связи задано как True, потому что элементы Order и OrderDetail вложены в схему.

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

См. также