Udostępnij za pośrednictwem


Mapowanie ograniczeń unique schematu XML (XSD) na ograniczenia elementu DataSet

W schemacie języka definicji schematu XML (XSD) unikatowy element określa ograniczenie unikatowości elementu lub atrybutu. W procesie tłumaczenia schematu XML na schemat relacyjny, unikatowe ograniczenie określone dla elementu lub atrybutu w schemacie XML jest mapowane na unikatowe ograniczenie w DataTable odpowiadającym im DataSet .

W poniższej tabeli przedstawiono atrybuty msdata, które można określić w unikatowym elemecie.

Attribute name opis
msdata:ConstraintName Jeśli ten atrybut zostanie określony, jego wartość jest używana jako nazwa ograniczenia. W przeciwnym razie atrybut name udostępnia wartość nazwy ograniczenia.
msdata:PrimaryKey Jeśli PrimaryKey="true" element jest obecny w unikatowym elemecie, zostanie utworzone unikatowe ograniczenie z właściwością IsPrimaryKey ustawioną na true.

W poniższym przykładzie przedstawiono schemat XML, który używa unikatowego elementu do określenia ograniczenia unikatowości.

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

Unikatowy element w schemacie określa, że dla wszystkich elementów Customers w wystąpieniu dokumentu wartość elementu podrzędnego CustomerID musi być unikatowa. Podczas tworzenia zestawu danych proces mapowania odczytuje ten schemat i generuje następującą tabelę:

Customers (CustomerID, CompanyName, Phone)  

Proces mapowania tworzy również unikatowe ograniczenie w kolumnie CustomerID , jak pokazano w poniższym zestawie danych. (Dla uproszczenia wyświetlane są tylko odpowiednie właściwości).

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

W generowanym zestawie danych właściwość IsPrimaryKey jest ustawiona na wartość False dla unikatowego ograniczenia. Unikatowa właściwość w kolumnie wskazuje, że wartości kolumny CustomerID muszą być unikatowe (ale mogą to być odwołania o wartości null określone przez właściwość AllowDBNull kolumny).

Jeśli zmodyfikujesz schemat i ustawisz opcjonalną wartość atrybutu msdata:PrimaryKey na true, w tabeli zostanie utworzone unikatowe ograniczenie. Właściwość kolumny AllowDBNull jest ustawiona na wartość False, a właściwość IsPrimaryKey ograniczenia ustawiona na wartość True, co spowoduje, że kolumna CustomerID będzie kolumną klucza podstawowego.

Można określić unikatowe ograniczenie kombinacji elementów lub atrybutów w schemacie XML. W poniższym przykładzie pokazano, jak określić, że kombinacja wartości CustomerID i CompanyName musi być unikatowa dla wszystkich klientów w dowolnym wystąpieniu, dodając kolejny element xs:field w schemacie.

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

Jest to ograniczenie utworzone w wynikowym zestawie danych.

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

Zobacz też