XML スキーマ定義言語 (XSD) スキーマでは、 一意 の要素は要素または属性の一意性制約を指定します。 XML スキーマをリレーショナル スキーマに変換するプロセスでは、XML スキーマ内の要素または属性に指定された一意制約が、生成される対応するDataTableのDataSetの一意制約にマップされます。
次の表は、一意の要素で指定できる msdata 属性の概要を示しています。
属性名 | 説明 |
---|---|
msdata:ConstraintName | この属性を指定すると、その値が制約名として使用されます。 それ以外の場合、 name 属性は制約名の値を提供します。 |
msdata:PrimaryKey |
PrimaryKey="true" が一意の要素に存在する場合は、IsPrimaryKey プロパティを true に設定して一意の制約が作成されます。 |
次の例は、unique 要素を使用して 一意 性制約を指定する XML スキーマを示しています。
<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>
スキーマ内の 一意 の要素は、ドキュメント インスタンス内のすべての Customers 要素について、 CustomerID 子要素の値が一意である必要があることを指定します。 DataSet をビルドする場合、マッピング プロセスはこのスキーマを読み取り、次の表を生成します。
Customers (CustomerID, CompanyName, Phone)
マッピング プロセスでは、次の DataSet に示すように、CustomerID 列に一意の制約も作成されます。 (わかりやすくするために、関連するプロパティのみが表示されます)。
DataSetName: MyDataSet
TableName: Customers
ColumnName: CustomerID
AllowDBNull: True
Unique: True
ConstraintName: UcustID Type: UniqueConstraint
Table: Customers
Columns: CustomerID
IsPrimaryKey: False
生成される DataSet では、一意制約の IsPrimaryKey プロパティが False に設定されます。 列の 一意 のプロパティは、 CustomerID 列の値が一意である必要があることを示します (ただし、列の AllowDBNull プロパティで指定されている null 参照を指定できます)。
スキーマを変更し、オプションの msdata:PrimaryKey 属性値を True に設定すると、テーブルに一意の制約が作成されます。 AllowDBNull 列プロパティが False に設定され、制約の IsPrimaryKey プロパティが True に設定されているため、CustomerID 列が主キー列になります。
XML スキーマ内の要素または属性の組み合わせに対して一意の制約を指定できます。 次の例では、スキーマに別の xs:field 要素を追加することで、CustomerID 値と CompanyName 値の組み合わせを任意のインスタンス内のすべての Customers に対して一意にする必要があることを指定する方法を示します。
<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