Delen via


Beperkingen van het unieke XML-schema (XSD) toewijzen aan datasetbeperkingen

In een XSD-schema (XML Schema Definition Language) geeft het unieke element de uniekheidsbeperking voor een element of kenmerk op. Tijdens het vertalen van een XML-schema in een relationeel schema wordt de unieke beperking die is opgegeven voor een element of kenmerk in het XML-schema toegewezen aan een unieke beperking in de DataTable overeenkomende DataSet beperking die wordt gegenereerd.

De volgende tabel bevat een overzicht van de msdata-kenmerken die u in het unieke element kunt opgeven.

Naam van kenmerk Beschrijving
msdata:ConstraintName Als dit kenmerk is opgegeven, wordt de waarde gebruikt als de naam van de beperking. Anders geeft het naamkenmerk de waarde van de naam van de beperking op.
msdata:PrimaryKey Als PrimaryKey="true" deze aanwezig is in het unieke element, wordt er een unieke beperking gemaakt met de eigenschap IsPrimaryKey ingesteld op true.

In het volgende voorbeeld ziet u een XML-schema dat gebruikmaakt van het unieke element om een uniekheidsbeperking op te geven.

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

Het unieke element in het schema geeft aan dat voor alle elementen van klanten in een documentinstantie de waarde van het onderliggende element CustomerID uniek moet zijn. Bij het bouwen van de DataSet leest het toewijzingsproces dit schema en wordt de volgende tabel gegenereerd:

Customers (CustomerID, CompanyName, Phone)  

Het toewijzingsproces maakt ook een unieke beperking voor de kolom CustomerID , zoals wordt weergegeven in de volgende DataSet. (Ter vereenvoudiging worden alleen relevante eigenschappen weergegeven.)

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

In de dataset die wordt gegenereerd, wordt de eigenschap IsPrimaryKey ingesteld op False voor de unieke beperking. De unieke eigenschap in de kolom geeft aan dat de waarden van de kolom CustomerID uniek moeten zijn (maar ze kunnen een null-verwijzing zijn, zoals opgegeven door de eigenschap AllowDBNull van de kolom).

Als u het schema wijzigt en de optionele kenmerkwaarde msdata:PrimaryKey instelt op True, wordt de unieke beperking gemaakt in de tabel. De kolomeigenschap AllowDBNull is ingesteld op False en de eigenschap IsPrimaryKey van de beperking is ingesteld op True, waardoor de kolom CustomerID een primaire-sleutelkolom wordt.

U kunt een unieke beperking opgeven voor een combinatie van elementen of kenmerken in het XML-schema. In het volgende voorbeeld ziet u hoe u kunt opgeven dat een combinatie van waarden voor CustomerID en CompanyName uniek moet zijn voor alle klanten in elk geval door een ander xs:field-element in het schema toe te voegen.

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

Dit is de beperking die wordt gemaakt in de resulterende DataSet.

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

Zie ook