다음을 통해 공유


Keyref XML 스키마(XSD) 제약 조건을 DataSet 제약 조건에 매핑

keyref 요소를 사용하면 문서 내의 요소 간에 연결을 설정할 수 있습니다. 이는 관계형 데이터베이스의 외래 키 관계와 유사합니다. 스키마가 요소를 지정 keyref 하는 경우 스키마 매핑 프로세스 중에 요소가 테이블의 DataSet열에 해당하는 외래 키 제약 조건으로 변환됩니다. 기본적으로 keyref 요소는 관계형에 지정된 ParentTable, ChildTable, ParentColumnChildColumn 속성을 사용하여 관계도 생성합니다.

다음 표에서는 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 자식 요소 간의 keykeyref 관계를 지정하는 스키마가 포함되어 있습니다.

예제에서 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: False
    
  • OrderOrderDetail 테이블 간의 관계. 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
    

참고하십시오