Compartir a través de


Asignar restricciones UNIQUE de un esquema XML (XSD) a restricciones de conjuntos de datos

En un esquema del lenguaje de definición de esquemas XML (XSD), el unique elemento especifica la restricción de exclusividad en un elemento o atributo. En el proceso de traducir un esquema XML en un esquema relacional, la restricción única especificada en un elemento o atributo del esquema XML se asigna a una restricción única en el DataTable del DataSet correspondiente que se genera.

En la tabla siguiente se describen los msdata atributos que puede especificar en el unique elemento .

Nombre del atributo Descripción
msdata:ConstraintName Si se especifica este atributo, su valor se usa como nombre de restricción. De lo contrario, el name atributo proporciona el valor del nombre de restricción.
msdata:PrimaryKey Si PrimaryKey="true" está presente en el unique elemento , se crea una restricción única con la IsPrimaryKey propiedad establecida en true.

En el ejemplo siguiente se muestra un esquema XML que usa el unique elemento para especificar una restricción de unicidad.

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

El unique elemento del esquema especifica que para todos los Customers elementos de una instancia de documento, el valor del CustomerID elemento secundario debe ser único. Al compilar el conjunto de datos, el proceso de asignación lee este esquema y genera la tabla siguiente:

Customers (CustomerID, CompanyName, Phone)

El proceso de asignación también crea una restricción única en la columna CustomerID, como se muestra en el siguiente DataSet. (Por motivos de simplicidad, solo se muestran las propiedades pertinentes).

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

En el DataSet que se genera, la propiedad IsPrimaryKey se establece en False para la restricción única. La unique propiedad de la columna indica que los CustomerID valores de columna deben ser únicos (pero pueden ser una referencia nula, tal como especifica la AllowDBNull propiedad de la columna).

Si modifica el esquema y establece el valor de atributo opcional msdata:PrimaryKey en True, se crea la restricción unique en la tabla. La propiedad de la AllowDBNull columna se establece en False y la propiedad de la IsPrimaryKey restricción se establece en True, lo que convierte la CustomerID columna en una columna de clave principal.

Puede especificar una restricción única en una combinación de elementos o atributos en el esquema XML. En el ejemplo siguiente se muestra cómo especificar que una combinación de CustomerID valores y CompanyName debe ser única para todo Customers en cualquier instancia agregando otro elemento xs:field en el esquema.

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

Esta es la restricción que se crea en el dataset resultante.

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

Consulte también