DataRelation 개체 소개
업데이트: 2007년 11월
관련 데이터 네이블을 포함하는 데이터 집합은 DataRelation 개체를 사용하여 테이블 사이의 부모/자식 관계를 나타내고 서로 관련 레코드를 반환합니다. 데이터 소스 구성 마법사 또는 데이터 집합 디자이너를 사용하여 관련 테이블을 데이터 집합에 추가하면 DataRelation 개체가 만들어지고 구성됩니다. 관련 레코드 반환에 대한 자세한 내용은 방법: 관련 DataTable의 레코드에 액세스를 참조하십시오. 데이터 관계를 만드는 방법에 대한 자세한 내용은 방법: 데이터 집합 디자이너를 사용하여 DataRelation 만들기를 참조하십시오.
DataRelation 개체는 다음과 같은 두 가지 기능을 수행합니다.
현재 작업하고 있는 레코드와 관련된 레코드를 사용할 수 있습니다. 부모 레코드로 작업하는 경우에는 자식 레코드가(GetChildRows), 자식 레코드로 작업하는 경우에는 부모 레코드가(GetParentRow) 제공됩니다.
부모 레코드 삭제 시 관련 자식 레코드도 삭제하는 등의 참조 무결성을 위한 제약 조건을 적용할 수 있습니다.
실제 조인과 DataRelation 개체 기능과의 차이점을 이해해야 합니다. 실제 조인의 경우 부모 및 자식 테이블의 레코드를 가져와서 단일 기본 레코드 집합에 넣습니다. 반면에 DataRelation 개체를 사용하는 경우에는 레코드 집합을 새로 만들지 않고 테이블 간의 관계를 추적하여 부모 레코드와 자식 레코드의 동기화를 유지합니다.
DataRelation 개체 및 제약 조건
다음과 같은 제약 조건을 만들고 적용하는 데에도 DataRelation 개체를 사용합니다.
고유 제약 조건. 이 제약 조건은 테이블의 열에 중복된 값이 올 수 없도록 합니다.
외래 키 제약 조건. 이 제약 조건은 데이터 집합에 있는 부모 및 자식 테이블 간의 참조 무결성 유지에 사용됩니다.
DataRelation 개체에 지정하는 제약 조건은 자동으로 적절한 개체를 만들거나 속성을 설정함으로 구현됩니다. DataRelation 개체를 사용하여 외래 키 제약 조건을 만드는 경우 ForeignKeyConstraint 클래스의 인스턴스가 DataRelation의 ChildKeyConstraint 속성에 추가됩니다.
UNIQUE 제약 조건은 단순히 데이터 열의 Unique 속성을 true로 설정하거나 UniqueConstraint 클래스의 인스턴스를 DataRelation 개체의 ParentKeyConstraint에 추가함으로써 구현됩니다. 데이터 집합의 제약 조건을 일시 중단하는 방법에 대한 자세한 내용은 방법: 데이터 집합을 채우는 동안 제약 조건 해제를 참조하십시오.
참조 무결성 규칙
외래 키 제약 조건의 일부로 다음 세 가지 경우에 적용되는 참조 무결성 규칙을 지정할 수 있습니다.
부모 레코드가 업데이트되는 경우
부모 레코드가 삭제되는 경우
변경 내용이 수용 또는 거부되는 경우
만들 수 있는 규칙은 Rule 열거형에 지정되어 있으며 다음 표는 이러한 규칙을 정리한 것입니다.
외래 키 제약 조건 규칙 |
작업 |
||
---|---|---|---|
부모 레코드가 변경(업데이트 또는 삭제)되면 자식 테이블의 관련 레코드도 변경됩니다. |
|||
자식 레코드는 삭제되지 않으나 자식 레코드의 외래 키가 DBNull로 설정됩니다. 이 값이 설정되어 있는 경우 자식 레코드는 부모 레코드와 관계가 없는 소위 "고아"가 될 수 있습니다.
|
|||
관련 자식 레코드의 외래 키가 해당 열의 DefaultValue 속성에 의해 기본값으로 설정됩니다. |
|||
관련 자식 레코드가 변경되지 않습니다. 이 값이 설정되어 있는 경우 자식 레코드에서 유효하지 않은 부모 레코드를 참조할 수 있습니다. |
데이터 집합 테이블의 업데이트에 대한 자세한 내용은 데이터 저장 개요를 참조하십시오.
제약 조건만 적용되는 관계
DataRelation 개체를 만들 때 관계가 제약 조건을 적용하는 데만 사용되고 관련 레코드 액세스에는 사용되지 않도록 지정할 수 있습니다. 이 옵션을 사용하면 관련 레코드 기능을 가진 데이터 집합보다 더 효율적이고 메서드가 더 적은 데이터 집합을 만들 수 있습니다. 그러나 관련 레코드에는 액세스할 수 없습니다. 예를 들어, 제약 조건만 적용되는 관계를 사용하면 자식이 있는 부모 레코드를 삭제할 수 없고 부모를 통해 자식 레코드에 액세스할 수 없습니다.