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


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

В схеме можно указать ограничение ключа для элемента или атрибута с помощью ключевого элемента. Элемент или атрибут, для которого задано ограничение ключа, должен иметь уникальные значения в любом экземпляре схемы и не может иметь значения NULL.

Ограничение ключа аналогично уникальному ограничению, за исключением того, что столбец, на котором определено ограничение ключа, не может иметь значения NULL.

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

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

При преобразовании схемы, в которой задано ограничение ключа, процесс сопоставления создает уникальное ограничение для таблицы со свойством столбца AllowDBNull , равным false для каждого столбца в ограничении. Свойство IsPrimaryKey уникального ограничения также имеет значение false , если вы не указали msdata:PrimaryKey="true" в элементе ключа . Это идентично уникальному ограничению в схеме, в которой PrimaryKey="true".

В следующем примере схемы ключевой элемент указывает ограничение ключа для элемента CustomerID .

<xs:schema id="cod"  
            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:string" 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="MyDataSet" msdata:IsDataSet="true">  
  <xs:complexType>  
    <xs:choice maxOccurs="unbounded">  
      <xs:element ref="Customers" />  
    </xs:choice>  
  </xs:complexType>  
   <xs:key  msdata:PrimaryKey="true"  
       msdata:ConstraintName="KeyCustID"  
          name="KeyConstCustomerID" >  
     <xs:selector xpath=".//Customers" />  
     <xs:field xpath="CustomerID" />  
    </xs:key>  
 </xs:element>  
</xs:schema>

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

Customers(CustomerID, CompanyName, Phone)  

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

      DataSetName: MyDataSet  
TableName: customers  
  ColumnName: CustomerID  
      AllowDBNull: False  
      Unique: True  
  ConstraintName: KeyCustID  
      Table: customers  
      Columns: CustomerID
      IsPrimaryKey: True  

В созданном наборе данных свойство IsPrimaryKey объекта UniqueConstraint имеет значение true , так как схема указывает msdata:PrimaryKey="true"в ключевом элементе.

Значение свойства ConstraintName объекта UniqueConstraint в Наборе данных — это значение атрибута msdata:ConstraintName , указанного в ключевом элементе схемы.

См. также