Udostępnij przez


Przypisuj unikalne ograniczenia schematu XML (XSD) do ograniczeń zestawu danych

W schemacie języka definicji schematu XML (XSD) element unique określa ograniczenie unikatowości dla elementu lub atrybutu. W procesie przekładu schematu XML na schemat relacyjny, unikatowe ograniczenie określone dla elementu lub atrybutu w schemacie XML jest odwzorowywane na unikatowe ograniczenie w DataTable w odpowiadającym mu wygenerowanym DataSet.

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

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

W poniższym przykładzie przedstawiono schemat XML, który używa unique 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>

Element unique w schemacie określa, że dla wszystkich Customers elementów w wystąpieniu dokumentu wartość CustomerID elementu podrzędnego 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 CustomerID kolumnie, 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 DataSet obiekcie właściwość IsPrimaryKey jest ustawiona na False dla unikatowego ograniczenia. Właściwość unique w kolumnie wskazuje, że wartość CustomerID kolumny musi być unikatowa (ale może być wartością null, określoną przez właściwość AllowDBNull kolumny).

Jeśli zmodyfikujesz schemat i ustawisz opcjonalną msdata:PrimaryKey wartość atrybutu na True, w tabeli zostanie utworzone unikatowe ograniczenie. Właściwość AllowDBNull kolumny jest ustawiona na wartość False, a IsPrimaryKey właściwość ograniczenia ustawiona na wartość True, co powoduje, że kolumna jest CustomerID 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 CustomerID wartości i CompanyName musi być unikatowa dla wszystkich Customers 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 także