Mapowanie ograniczeń keyref schematu XML (XSD) na ograniczenia elementu DataSet
Element keyref umożliwia ustanawianie łączy między elementami w dokumencie. Jest to podobne do relacji klucza obcego w relacyjnej bazie danych. Jeśli schemat określa element keyref , element jest konwertowany podczas procesu mapowania schematu na odpowiednie ograniczenie klucza obcego w kolumnach w tabelach DataSet. Domyślnie element keyref generuje również relację z właściwościami ParentTable, ChildTable, ParentColumn i ChildColumn określonymi w relacji.
W poniższej tabeli przedstawiono atrybuty msdata , które można określić w elemecie keyref .
Attribute name | opis |
---|---|
msdata:ConstraintOnly | Jeśli parametr ConstraintOnly="true" zostanie określony w elemecie keyref w schemacie, zostanie utworzone ograniczenie, ale nie zostanie utworzona żadna relacja. Jeśli ten atrybut nie zostanie określony (lub jest ustawiony na Wartość Fałsz), zarówno ograniczenie, jak i relację są tworzone w zestawie danych. |
msdata:ConstraintName | Jeśli określono atrybut ConstraintName, jego wartość jest używana jako nazwa ograniczenia. W przeciwnym razie atrybut name elementu keyref w schemacie zawiera nazwę ograniczenia w zestawie danych. |
msdata:UpdateRule | Jeśli atrybut UpdateRule jest określony w elemecie keyref w schemacie, jego wartość jest przypisywana do właściwości ograniczenia UpdateRule w zestawie danych. W przeciwnym razie właściwość UpdateRule jest ustawiona na Cascade. |
msdata:DeleteRule | Jeśli atrybut DeleteRule jest określony w elemecie keyref w schemacie, jego wartość jest przypisywana do właściwości ograniczenia DeleteRule w zestawie danych. W przeciwnym razie właściwość DeleteRule jest ustawiona na Wartość Kaskadowa. |
msdata:AcceptRejectRule | Jeśli atrybut AcceptRejectRule jest określony w elemecie keyref w schemacie, jego wartość jest przypisywana do właściwości ograniczenia AcceptRejectRule w zestawie danych. W przeciwnym razie właściwość AcceptRejectRule jest ustawiona na Wartość Brak. |
Poniższy przykład zawiera schemat określający relacje klucza i kluczaref między elementem podrzędnym OrderNumber elementu Order i elementem podrzędnym OrderNo elementu OrderDetail .
W przykładzie element podrzędny OrderNumber elementu OrderDetail odwołuje się do elementu podrzędnego OrderNo elementu podrzędnego elementu Order.
<xs:schema id="MyDataSet" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="OrderDetail">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNo" type="xs:integer" />
<xs:element name="ItemNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNumber" type="xs:integer" />
<xs:element name="EmpNumber" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="OrderNumberKey" >
<xs:selector xpath=".//Order" />
<xs:field xpath="OrderNumber" />
</xs:key>
<xs:keyref name="OrderNoRef" refer="OrderNumberKey">
<xs:selector xpath=".//OrderDetail" />
<xs:field xpath="OrderNo" />
</xs:keyref>
</xs:element>
</xs:schema>
Proces mapowania schematu języka xml (XSD) tworzy następujący zestaw danych z dwiema tabelami:
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
Ponadto zestaw danych definiuje następujące ograniczenia:
Unikatowe ograniczenie w tabeli Order .
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
Relacja między tabelami Order i OrderDetail . Właściwość Zagnieżdżona ma wartość False , ponieważ dwa elementy nie są zagnieżdżone w schemacie.
ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False
Ograniczenie klucza obcego w tabeli OrderDetail .
ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber