スキーマでは、キー要素を使用して、要素または属性に キー 制約を指定できます。 キー制約が指定される要素または属性は、どのスキーマ インスタンスでも一意の値を持つ必要があり、null 値を持つことはできません。
キー制約は一意制約に似ていますが、キー制約が定義されている列に null 値を指定することはできません。
次の表は、キー要素で指定できる msdata 属性の概要を示しています。
属性名 | 説明 |
---|---|
msdata:ConstraintName | この属性を指定すると、その値が制約名として使用されます。 それ以外の場合、 name 属性は制約名の値を提供します。 |
msdata:PrimaryKey |
PrimaryKey="true" が存在する場合、IsPrimaryKey 制約プロパティは true に設定されるため、主キーになります。
AllowDBNull 列プロパティは false に設定されます。主キーには null 値を設定できないためです。 |
キー制約が指定されているスキーマを変換する場合、マッピング プロセスでは、制約内の各列に 対して AllowDBNull 列プロパティが false に設定された一意の制約がテーブルに作成されます。
キー要素にを指定しない限り、一意制約の msdata:PrimaryKey="true"
プロパティも false に設定されます。 これは、 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>
キー要素は、Customers 要素の CustomerID 子要素の値が一意の値を持つ必要があり、null 値を持つことができないことを指定します。 XML スキーマ定義言語 (XSD) スキーマを翻訳する場合、マッピング プロセスによって次の表が作成されます。
Customers(CustomerID, CompanyName, Phone)
XML スキーマ マッピングでは、次のに示すように、CustomerID 列に DataSet も作成されます。 (わかりやすくするために、関連するプロパティのみが表示されます)。
DataSetName: MyDataSet
TableName: customers
ColumnName: CustomerID
AllowDBNull: False
Unique: True
ConstraintName: KeyCustID
Table: customers
Columns: CustomerID
IsPrimaryKey: True
生成される DataSet では、スキーマがキー要素にを指定するため、UniqueConstraint の msdata:PrimaryKey="true"
プロパティは true に設定されます。
DataSet の UniqueConstraint の ConstraintName プロパティの値は、スキーマのキー要素で指定された msdata:ConstraintName 属性の値です。