다음을 통해 공유


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

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

다음 표에서는 keyref 요소에서 지정할 수 있는 msdata 특성을 간략하게 설명합니다.

속성 이름 설명
msdata:ConstraintOnly (제약조건 전용) 스키마의 keyref 요소에 ConstraintOnly="true"를 지정하면 제약 조건이 만들어지지만 관계가 만들어지지 않습니다. 이 특성을 지정하지 않았거나 False로 설정하면 제약 조건과 관계가 모두 DataSet에 만들어집니다.
msdata:ConstraintName ConstraintName 특성을 지정하면 해당 값이 제약 조건의 이름으로 사용됩니다. 그렇지 않으면 스키마에 있는 keyref 요소의 이름 특성은 DataSet에서 제약 조건 이름을 제공합니다.
msdata:UpdateRule 스키마의 keyref 요소에 UpdateRule 특성을 지정하면 해당 값이 DataSetUpdateRule 제약 조건 속성에 할당됩니다. 그렇지 않으면 UpdateRule 속성이 Cascade로 설정됩니다.
msdata:DeleteRule 스키마의 keyref 요소에 DeleteRule 특성을 지정하면 해당 값이 DataSetDeleteRule 제약 조건 속성에 할당됩니다. 그렇지 않으면 DeleteRule 속성이 Cascade로 설정됩니다.
msdata:AcceptRejectRule 스키마의 keyref 요소에 AcceptRejectRule 특성이 지정된 경우 해당 값은 DataSetAcceptRejectRule 제약 조건 속성에 할당됩니다. 그렇지 않으면 AcceptRejectRule 속성이 None으로 설정됩니다.

다음 예제에서는 Order 요소의 OrderNumber 자식 요소와 OrderDetail 요소의 OrderNo 자식 요소 간의 keyref 관계를 지정하는 스키마를 포함합니다.

예제에서 OrderDetail 요소의 OrderNumber 자식 요소는 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  
    
  • Order 테이블과 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
    

참고하십시오