다음을 통해 공유


.NET Framework 애플리케이션에서 데이터 세트 간의 관계 만들기

참고 항목

데이터 집합 및 관련 클래스는 2000년대 초반에 적용된 레거시 .NET Framework 기술로, 응용 프로그램이 데이터베이스에서 연결이 끊어진 동안 응용 프로그램이 메모리의 데이터로 작업할 수 있도록 합니다. 사용자가 데이터를 수정하고 변경 내용을 다시 데이터베이스에 유지할 수 있도록 하는 애플리케이션에 특히 유용합니다. 데이터 세트는 매우 성공적인 기술로 입증되었지만 새 .NET 애플리케이션은 Entity Framework Core를 사용하는 것이 좋습니다. Entity Framework는 표 형식 데이터를 개체 모델로 사용하는 더 자연스러운 방법을 제공하며 더 단순한 프로그래밍 인터페이스를 제공합니다.

관련 데이터 테이블이 포함된 데이터 세트는 DataRelation 개체를 사용하여 테이블 간의 부모/자식 관계를 나타내고 서로 간에 관련된 레코드를 반환합니다. 데이터 원본 구성 마법사 또는 데이터 세트 디자이너를 사용하여 를 사용하여 데이터 세트에 관련 테이블을 추가하면 자동으로 DataRelation 개체가 만들어지고 구성됩니다.

DataRelation 개체는 다음 두 가지 기능을 수행합니다.

  • 작업 중인 레코드와 관련된 레코드를 사용 가능하게 만들 수 있습니다. 부모 레코드(GetChildRows)에 있는 경우 자식 레코드를 제공하고, 자식 레코드(GetParentRow)로 작업하는 경우 부모 레코드를 제공합니다.

  • 부모 레코드를 삭제할 때 관련 자식 레코드를 삭제하는 등 참조 무결성에 대한 제약 조건을 적용할 수 있습니다.

실제 조인과 DataRelation 개체의 기능 간 차이점을 이해하는 것이 중요합니다. 실제 조인에서 레코드는 부모 및 자식 테이블에서 가져오며 단일 플랫 레코드 집합에 배치됩니다. DataRelation 개체를 사용하는 경우 새 레코드 집합을 만들 수 없습니다. 대신, DataRelation은 테이블 간의 관계를 추적하고 부모 레코드와 자식 레코드를 동기화된 상태로 유지합니다.

DataRelation 개체 및 제약 조건

DataRelation 개체는 다음과 같은 제약 조건을 만들고 적용하는 데도 사용됩니다.

  • 테이블의 열에 중복 항목이 포함되지 않도록 보장하는 unique 제약 조건.

  • 데이터 세트의 부모 테이블과 자식 테이블 간에 참조 무결성을 유지하는 데 사용할 수 있는 외래 키 제약 조건.

DataRelation 개체에서 지정하는 제약 조건은 자동으로 적절한 개체를 만들거나 속성을 설정하여 구현됩니다. DataRelation 개체를 사용하여 외래 키 제약 조건을 만드는 경우 ForeignKeyConstraint 클래스 인스턴스가 DataRelation 개체의 ChildKeyConstraint 속성에 추가됩니다.

unique 제약 조건은 데이터 열의 Unique 속성을 true로 설정하거나 UniqueConstraint 클래스 인스턴스를 DataRelation 개체의 ParentKeyConstraint 속성에 추가하기만 하면 구현됩니다. 데이터 세트의 제약 조건 일시 중단에 대한 자세한 내용은 데이터 세트를 채우는 동안 제약 조건 해제를 참조하세요.

참조 무결성 규칙

외래 키 제약 조건의 일부로 세 시점에서 적용되는 참조 무결성 규칙을 지정할 수 있습니다.

  • 부모 레코드가 업데이트되는 경우

  • 부모 레코드가 삭제되는 경우

  • 변경 내용이 수락 또는 거부되는 경우

설정할 수 있는 규칙은 Rule 열거형에 지정되어 있으며 다음 표에 나와 있습니다.

와래 키 제약 조건 규칙 작업
Cascade 부모 레코드에 대한 변경(업데이트 또는 삭제)은 자식 테이블의 관련 레코드에도 적용됩니다.
SetNull 자식 레코드는 삭제되지 않지만 자식 레코드의 외래 키는 DBNull로 설정됩니다. 이 설정을 사용하면 자식 레코드를 "고아"로 남겨둘 수 있습니다. 즉, 부모 레코드와 아무 관계가 없습니다. 참고: 이 규칙을 사용하면 자식 테이블에 잘못된 데이터가 생성될 수 있습니다.
SetDefault 관련 자식 레코드의 외래 키는 열의 DefaultValue 속성에 지정된 기본값으로 설정됩니다.
None 관련 자식 레코드는 변경되지 않습니다. 이 설정을 사용하면 자식 레코드에 잘못된 부모 레코드에 대한 참조가 포함될 수 있습니다.

데이터 세트 테이블의 업데이트에 대한 자세한 내용은 데이터를 다시 데이터베이스에 저장을 참조하세요.

제약 조건 전용 관계

DataRelation 개체를 만들 때 제약 조건을 적용하는 경우에만 관계를 사용하도록 지정할 수 있습니다. 즉, 관련 레코드에 액세스하는 데에도 사용되지 않습니다. 이 옵션을 사용하여 약간 더 효율적이고 관련 레코드 기능을 사용하는 것보다 적은 메서드를 포함하는 데이터 세트를 생성할 수 있습니다. 그러나 관련 레코드에는 액세스할 수 없습니다. 예를 들어 제약 조건 전용 관계를 사용하면 아직 자식 레코드가 있는 부모 레코드를 삭제할 수 없으며, 부모를 통해 자식 레코드에 액세스할 수 없습니다.

데이터 세트 디자이너에서 수동으로 데이터 관계 만들기

Visual Studio에서 데이터 디자인 도구를 사용하여 데이터 테이블을 만들 때 데이터 원본에서 정보를 수집할 수 있는 경우 자동으로 관계가 만들어집니다. 도구 상자데이터 세트 탭에서 수동으로 데이터 테이블을 추가하는 경우 관계를 수동으로 만들어야 할 수 있습니다. 프로그래밍 방식으로 DataRelation 개체를 만드는 방법에 대한 자세한 내용은 DataRelation 추가를 참조하세요.

데이터 테이블 간의 관계는 관계의 일대다 측면을 보여 주는 키 및 무한대 문자 모양을 사용하여 데이터 세트 디자이너에 선으로 나타납니다. 기본적으로 관계의 이름은 디자인 화면에 표시되지 않습니다.

참고 항목

이 문서의 일부 Visual Studio 사용자 인터페이스 요소에 대한 다른 이름 또는 위치가 컴퓨터에 표시될 수 있습니다. 다른 버전의 Visual Studio 또는 다른 환경 설정을 사용 중일 수 있습니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

두 데이터 테이블 간에 관계를 만들려면

  1. 데이터 세트 디자이너에서 데이터 세트를 엽니다. 자세한 내용은 연습: 데이터 세트 디자이너에서 데이터 세트 만들기를 참조하세요.

  2. 관계 개체를 데이터 세트 도구 상자에서 관계의 자식 데이터 테이블로 끌어 놓습니다.

    관계 대화 상자가 열리고 관계 개체를 끌어온 테이블로 자식 테이블 상자를 채웁니다.

  3. 부모 테이블 상자에서 부모 테이블을 선택합니다. 부모 테이블에는 일대다 관계의 “일” 쪽에 있는 레코드가 포함됩니다.

  4. 자식 테이블 상자에 올바른 자식 테이블이 표시되는지 확인합니다. 자식 테이블에는 일대다 관계의 "다" 쪽에 있는 레코드가 포함됩니다.

  5. 이름 상자에 관계의 이름을 입력하거나 선택한 테이블을 기반으로 한 기본 이름을 그대로 둡니다. 이것이 코드에서 실제 DataRelation 개체의 이름입니다.

  6. 키 열외래 키 열 목록에서 테이블을 조인하는 열을 선택합니다.

  7. 관계, 제약 조건 또는 둘 다를 만들지 여부를 선택합니다.

  8. 중첩 관계 상자를 선택하거나 선택 취소합니다. 이 옵션을 선택하면 Nested 속성이 true로 설정되고, 해당 행이 XML 데이터로 작성되거나 XmlDataDocument와 동기화될 때 관계의 자식 행이 부모 열 안에 중첩됩니다. 자세한 내용은 DataRelation 중첩을 참조하세요.

  9. 이러한 테이블의 레코드를 변경하는 경우 적용되는 규칙을 설정합니다. 자세한 내용은 Rule를 참조하세요.

  10. 확인을 클릭하여 관계를 만듭니다. 디자이너에서 두 테이블 사이에 관계 선이 나타납니다.

데이터 세트 디자이너에 관계 이름을 표시하려면

  1. 데이터 세트 디자이너에서 데이터 세트를 엽니다. 자세한 내용은 연습: 데이터 세트 디자이너에서 데이터 세트 만들기를 참조하세요.

  2. 데이터 메뉴에서 관계 레이블 표시 명령을 선택하여 관계 이름을 표시합니다. 이 명령을 선택 취소하여 관계 이름을 숨깁니다.