DataSet では、親子のリレーションシップを作成することにより、2 つ以上の列間の関連付けを行います。XML スキーマ定義言語 (XSD) スキーマ内で DataSet のリレーションシップを表すには、次の 3 つの方法があります。
- 入れ子になった複合型を指定する方法
- msdata:Relationship 注釈を使用する方法
- msdata:ConstraintOnly 注釈を使用せずに xs:keyref を指定する方法
入れ子になった複合型
スキーマ内で複数の複合型の定義が入れ子になっている場合は、それらの入れ子状の要素間に親子のリレーションシップがあります。OrderDetail が Order 要素の子要素であることを示す XML スキーマのフラグメントを次に示します。
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
... <xs:element name="OrderDetail" /> <xs:complexType>
...
</xs:complexType>
</xs:sequence>
</xs:complexType>
</xs:element>
XML スキーマの割り当て処理によって、スキーマの入れ子になった複合型に対応する DataSet にテーブルが作成されます。また、生成されたテーブルの親子列として使用される追加列も作成されます。その親子列ではリレーションシップが指定されますが、主キー/外部キーの制約とは異なるため注意してください。
msdata:Relationship 注釈
msdata:Relationship 注釈を使用すると、入れ子になっていないスキーマの要素間の親子のリレーションシップを明示的に指定できます。Relationship 要素の構造を示すコード例を次に示します。
<msdata:Relationship name="CustOrderRelationship"
msdata:parent="..."
msdata:child="..."
msdata:parentkey="..."
msdata:childkey="..." />
msdata:Relationship 注釈の属性は、リレーションシップに必要な parentkey 要素と childkey 要素、および属性と同様に親子のリレーションシップに必要な要素を示します。割り当て処理では、その情報に基づいて DataSet にテーブルを作成し、それらのテーブル間に主キー/外部キーのリレーションシップを作成します。
たとえば、同じレベルで (入れ子にせずに) Order 要素と OrderDetail 要素を指定するスキーマのフラグメントを次に示します。スキーマに msdata:Relationship 注釈を指定すると、その 2 つの要素間に親子のリレーションシップが指定されます。この場合、msdata:Relationship 注釈を使用してリレーションシップを明示的に指定する必要があります。
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="OrderDetail">
<xs:complexType>
...
</xs:complexType>
</xs:element>
<xs:element name="Order">
<xs:complexType>
...
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:annotation> <xs:appinfo> <msdata:Relationship name="OrdOrdDetailRelation" msdata:parent="Order" msdata:child="OrderDetail" msdata:parentkey="OrderNumber" msdata:childkey="OrderNo"/> </xs:appinfo> </xs:annotation>
割り当て処理では、Relationship 要素を使用して、DataSet にある Order テーブルの OrderNumber 列と OrderDetail テーブルの OrderNo 列に親子のリレーションシップが生成されます。割り当て処理で指定されるのはリレーションシップだけで、リレーショナル データベースにおける主キー制約や外部キー制約の場合とは異なり、該当する列の値に対する制約が自動的に指定されることはありません。「XML スキーマ (XSD) 型と .NET Framework 型の間でのデータ型のサポート」で説明されているように、XML スキーマの要素を使用して DataSet に制約を指定できます。
このセクションの内容
- 入れ子になっているスキーマ要素間の暗黙的なリレーションシップの割り当て
XML スキーマ内で要素が入れ子になっている場合に、DataSet 内に暗黙的に作成される制約とリレーションシップについて説明します。 - 入れ子になっている要素に指定したリレーションシップの割り当て
XML スキーマで入れ子になっている要素に対して、DataSet におけるリレーションシップを明示的に設定する方法について説明します。 - 入れ子になっていない要素間のリレーションシップの指定
XML スキーマで入れ子になっていない要素間に、DataSet におけるリレーションシップを作成する方法について説明します。
関連項目
- XML スキーマ (XSD) からの DataSet リレーショナル構造の生成
XML スキーマ定義言語 (XSD) スキーマから作成された DataSet のリレーショナル構造 (スキーマ) について説明します。 - XML スキーマ (XSD) 制約の DataSet 制約への割り当て
DataSet での UNQUE 制約および外部キー制約の作成に使用する XML スキーマの要素について説明します。 - XML スキーマ (XSD) 型と .NET Framework 型の間でのデータ型のサポート
DataSet の列に対して、XML スキーマの型を .NET Framework の型として表現する方法について説明します。