이 keyref 요소를 사용하면 문서 내의 요소 간에 연결을 설정할 수 있습니다. 이는 관계형 데이터베이스의 외래 키 관계와 유사합니다. 스키마가 요소를 지정 keyref 하는 경우 스키마 매핑 프로세스 중에 요소가 테이블의 DataSet열에 해당하는 외래 키 제약 조건으로 변환됩니다. 기본적으로 keyref 요소는 관계형에 지정된 ParentTable, ChildTable, ParentColumn 및 ChildColumn 속성을 사용하여 관계도 생성합니다.
다음 표에서는 msdata에서 지정할 수 있는 keyref 속성을 설명합니다.
| 속성 이름 | 설명 |
|---|---|
| msdata:ConstraintOnly (제약조건 전용) | 스키마의 요소에 keyref를 지정하면 제약 조건이 만들어지지만 관계가 만들어지지 않습니다. 이 특성을 지정하지 않았거나 False로 설정하면 제약 조건과 관계가 모두 DataSet에 만들어집니다. |
| msdata:ConstraintName |
ConstraintName 특성을 지정하면 해당 값이 제약 조건의 이름으로 사용됩니다. 그렇지 않으면 name 스키마에 있는 요소의 keyref 특성이 DataSet의 제약 조건 이름을 제공합니다. |
| msdata:UpdateRule | 특성이 UpdateRule 스키마의 keyref 요소에 지정된 경우 해당 값은 UpdateRule의 제약 조건 속성에 할당됩니다. 그렇지 않으면 속성이 UpdateRuleCascade로 설정됩니다. |
| msdata:DeleteRule | 특성이 DeleteRule 스키마의 keyref 요소에 지정된 경우 해당 값은 DeleteRule의 제약 조건 속성에 할당됩니다. 그렇지 않으면 속성이 DeleteRuleCascade로 설정됩니다. |
| msdata:AcceptRejectRule | 특성이 AcceptRejectRule 스키마의 keyref 요소에 지정된 경우 해당 값은 AcceptRejectRule의 제약 조건 속성에 할당됩니다. 그렇지 않으면 속성이 AcceptRejectRule None으로 설정 됩니다. |
다음 예제에는 Order 요소의 OrderNumber 자식 요소와 OrderDetail 요소의 OrderNo 자식 요소 간의 key 및 keyref 관계를 지정하는 스키마가 포함되어 있습니다.
예제에서 OrderNumber 요소의 OrderDetail 자식 요소는 Order 요소의 OrderNo 주요 자식 요소를 참조합니다.
<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>
XSD(XML 스키마 정의 언어) 스키마 매핑 프로세스는 다음 DataSet 두 테이블을 생성합니다.
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
또한 DataSet 다음 제약 조건을 정의합니다.
테이블에 대한
Order고유 제약 조건입니다.Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: FalseOrder및OrderDetail테이블 간의 관계.Nested속성은 두 요소가 스키마에False중첩되어 있지 않기 때문에 설정됩니다.ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False테이블
OrderDetail의 외래 키 제약 조건입니다.ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber