Сопоставление ограничений уникальности схемы XML (XSD) с ограничениями DataSet
Обновлен: November 2007
В схеме на языке XSD элемент unique накладывает на элемент или атрибут ограничение уникальности. В процессе преобразования схемы XML в реляционную схему наложенное на элемент или атрибут ограничение, гарантирующее уникальность, в XML-схеме сопоставляется с ограничением уникальности в объекте DataTable в соответствующем объекте DataSet, который формируется.
В следующей таблице приведено описание атрибутов msdata, которые можно задать в элементе unique.
Имя атрибута |
Описание |
---|---|
msdata:ConstraintName |
Если этот атрибут указан, его значение используется в качестве имени ограничения. В противном случае имя ограничения указывается атрибутом name. |
msdata:PrimaryKey |
Если в элементе unique присутствует PrimaryKey="true", то создается ограничение уникальности со свойством IsPrimaryKey, которому задано значение true. |
В следующем примере показана схема XML, в которой элемент unique используется для наложения ограничения уникальности.
<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>
Элемент unique в этой схеме указывает, что для всех элементов Customers в экземпляре документа значение дочернего элемента CustomerID должно быть уникальным. При построении объекта DataSet процесс сопоставления считывает эту схему и формирует следующую таблицу:
Customers (CustomerID, CompanyName, Phone)
Процесс сопоставления также налагает ограничение уникальности на столбец CustomerID, как показано в следующем объекте DataSet. (Для простоты показаны только значимые свойства.)
DataSetName: MyDataSet
TableName: Customers
ColumnName: CustomerID
AllowDBNull: True
Unique: True
ConstraintName: UcustID
Type: UniqueConstraint
Table: Customers
Columns: CustomerID
IsPrimaryKey: False
В сформированном объекте DataSet для ограничения уникальности свойство IsPrimaryKey имеет значение False. Свойство unique для столбца указывает, что значения в столбце CustomerID должны быть уникальными (однако они могут быть null, как указано свойством AllowDBNull столбца).
В случае изменения схемы и задания необязательному атрибуту msdata:PrimaryKey значения True, создается ограничение уникальности для таблицы. Свойство столбца AllowDBNull имеет значение False, а свойство IsPrimaryKey набора ограничений — значение True, в результате чего столбец CustomerID становится столбцом первичного ключа.
Ограничение уникальности можно наложить на сочетание элементов или атрибутов в схеме XML. В следующем примере демонстрируется, как указать, что сочетание значений CustomerID и CompanyName должно быть уникальным для всех Customers в любом экземпляре путем добавления в схему еще одного элемента xs:field.
<xs:unique
msdata:ConstraintName="SomeName"
name="UniqueCustIDConstr" >
<xs:selector xpath=".//Customers" />
<xs:field xpath="CustomerID" />
<xs:field xpath="CompanyName" />
</xs:unique>
Вот это ограничение, которое создано в итоговом объекте DataSet.
ConstraintName: SomeName
Table: Customers
Columns: CustomerID CompanyName
IsPrimaryKey: False
См. также
Основные понятия
Формирование связей DataSet на основе схемы XML (XSD)
Другие ресурсы
Сопоставление ограничений схемы XML (XSD) с ограничениями DataSet