スキーマでは、 key 要素を使用して、要素または属性にキー制約を指定できます。 キー制約が指定される要素または属性は、どのスキーマ インスタンスでも一意の値を持つ必要があり、null 値を持つことはできません。
キー制約は一意制約に似ていますが、キー制約が定義されている列に null 値を指定することはできません。
次の表は、msdata要素で指定できるkey属性の概要を示しています。
| 属性名 | 説明 |
|---|---|
| msdata:ConstraintName | この属性を指定すると、その値が制約名として使用されます。 それ以外の場合、 name 属性は制約名の値を提供します。 |
| msdata:PrimaryKey |
PrimaryKey="true"が存在する場合、IsPrimaryKey制約プロパティは true に設定されるため、主キーになります。 主キーに null 値を指定できないため、 AllowDBNull 列プロパティは false に設定されます。 |
キー制約が指定されているスキーマの変換では、マッピング プロセスによってテーブルに一意の制約が作成され、 AllowDBNull 列プロパティが制約内の各列に対して false に設定されます。
IsPrimaryKey要素にfalseを指定していない限り、一意制約のmsdata:PrimaryKey="true"プロパティもkeyに設定されます。 これは、 PrimaryKey="true"するスキーマの一意制約と同じです。
次のスキーマの例では、 key 要素は、 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>
key要素は、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
生成されるDataSetでは、スキーマがIsPrimaryKey要素でUniqueConstraintを指定するため、trueのmsdata:PrimaryKey="true" プロパティがkeyに設定されます。
ConstraintNameのUniqueConstraintのDataSet プロパティの値は、スキーマのmsdata:ConstraintName要素で指定されたkey属性の値です。