Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В схеме можно указать ограничение ключа для элемента или атрибута с помощью ключевого элемента. Элемент или атрибут, для которого задано ограничение ключа, должен иметь уникальные значения в любом экземпляре схемы и не может иметь значения NULL.
Ограничение ключа аналогично уникальному ограничению, за исключением того, что столбец, на котором определено ограничение ключа, не может иметь значения NULL.
В следующей таблице описаны атрибуты msdata, которые можно указать в ключевом элементе.
Имя атрибута | Описание |
---|---|
msdata:ConstraintName | Если этот атрибут указан, его значение используется в качестве имени ограничения. В противном случае атрибут name предоставляет значение имени ограничения. |
msdata:PrimaryKey | Если PrimaryKey="true" он присутствует, свойство ограничения IsPrimaryKey имеет значение true, что делает его первичным ключом. Свойство столбца AllowDBNull имеет значение false, так как первичные ключи не могут иметь значения NULL. |
При преобразовании схемы, в которой задано ограничение ключа, процесс сопоставления создает уникальное ограничение для таблицы со свойством столбца AllowDBNull , равным false для каждого столбца в ограничении. Свойство IsPrimaryKey уникального ограничения также имеет значение false , если вы не указали msdata:PrimaryKey="true"
в элементе ключа . Это идентично уникальному ограничению в схеме, в которой PrimaryKey="true"
.
В следующем примере схемы ключевой элемент указывает ограничение ключа для элемента CustomerID .
<xs:schema id="cod"
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:string" 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="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="Customers" />
</xs:choice>
</xs:complexType>
<xs:key msdata:PrimaryKey="true"
msdata:ConstraintName="KeyCustID"
name="KeyConstCustomerID" >
<xs:selector xpath=".//Customers" />
<xs:field xpath="CustomerID" />
</xs:key>
</xs:element>
</xs:schema>
Элемент ключ указывает на то, что значения дочернего элемента CustomerID элемента Customers должны иметь уникальные значения и не могут содержать значения NULL. При переводе схемы определения XML-схемы (XSD) процесс сопоставления создает следующую таблицу:
Customers(CustomerID, CompanyName, Phone)
Сопоставление схемы XML также создает UniqueConstraint в столбце CustomerID , как показано в следующем DataSetпримере. (Для простоты отображаются только соответствующие свойства.)
DataSetName: MyDataSet
TableName: customers
ColumnName: CustomerID
AllowDBNull: False
Unique: True
ConstraintName: KeyCustID
Table: customers
Columns: CustomerID
IsPrimaryKey: True
В созданном наборе данных свойство IsPrimaryKey объекта UniqueConstraint имеет значение true , так как схема указывает msdata:PrimaryKey="true"
в ключевом элементе.
Значение свойства ConstraintName объекта UniqueConstraint в Наборе данных — это значение атрибута msdata:ConstraintName , указанного в ключевом элементе схемы.