Сопоставление уникальных ограничений XML-схемы (XSD) с ограничениями набора данных

В схеме на языке определения XML Schema (XSD) элемент unique регламентирует ограничение уникальности для элемента или атрибута. При преобразовке XML-схемы в реляционную схему уникальное ограничение, указанное в элементе или атрибуте в схеме XML, сопоставляется с уникальным ограничением в DataTable соответствующем DataSet созданном объекте.

В следующей таблице описаны msdata атрибуты, которые можно указать в элементе unique .

Имя атрибута Описание
msdata:ConstraintName Если этот атрибут указан, его значение используется в качестве имени ограничения. name В противном случае атрибут предоставляет значение имени ограничения.
msdata:PrimaryKey Если PrimaryKey="true" присутствует в элементе unique, создаётся уникальное ограничение с установленным для свойства IsPrimaryKey значением true.

В следующем примере показана XML-схема, использующая unique элемент для указания ограничения уникальности.

<xs:schema id="SampleDataSet"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CustomerID" type="xs:integer"
           minOccurs="0"/>
        <xs:element name="CompanyName" type="xs:string"
           minOccurs="0"/>
       <xs:element name="Phone" type="xs:string" />
     </xs:sequence>
   </xs:complexType>
 </xs:element>

 <xs:element name="SampleDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:unique     msdata:ConstraintName="UCustID"     name="UniqueCustIDConstr" >       <xs:selector xpath=".//Customers" />       <xs:field xpath="CustomerID" />     </xs:unique>
</xs:element>
</xs:schema>

Элемент unique в схеме указывает, что для всех Customers элементов в экземпляре документа значение дочернего CustomerID элемента должно быть уникальным. При создании набора данных процесс сопоставления считывает эту схему и создает следующую таблицу:

Customers (CustomerID, CompanyName, Phone)

Процесс сопоставления также создает уникальное ограничение для столбцаCustomerID, как показано в следующем наборе данных. (Для простоты отображаются только соответствующие свойства.)

      DataSetName: MyDataSet
TableName: Customers
  ColumnName: CustomerID
      AllowDBNull: True
      Unique: True
  ConstraintName: UcustID       Type: UniqueConstraint
      Table: Customers
      Columns: CustomerID
      IsPrimaryKey: False

В созданном DataSetIsPrimaryKey свойстве задано False уникальное ограничение. Свойство unique столбца указывает, что CustomerID значения столбца должны быть уникальными (но они могут быть пустой ссылкой, как указано AllowDBNull свойством столбца).

Если изменить схему и задать значение msdata:PrimaryKey необязательного атрибута, в таблице создается уникальное ограничение. Свойство AllowDBNull столбца имеет значение False, а IsPrimaryKey свойство ограничения имеет значение True, что делает CustomerID столбец первичным ключевым столбцом.

Можно указать уникальное ограничение для сочетания элементов или атрибутов в схеме XML. В следующем примере показано, как указать, что сочетание CustomerID и CompanyName значения должны быть уникальными для всех Customers в любом экземпляре, добавив другой элемент xs:field в схему.

      <xs:unique
         msdata:ConstraintName="SomeName"
         name="UniqueCustIDConstr" >
  <xs:selector xpath=".//Customers" />
  <xs:field xpath="CustomerID" />
  <xs:field xpath="CompanyName" />
</xs:unique>

Это ограничение, созданное в результирующем наборе данных.

ConstraintName: SomeName
  Table: Customers
  Columns: CustomerID CompanyName
  IsPrimaryKey: False

См. также