데이터베이스 내 여러 테이블에서 데이터를 검색하는 가장 좋은 방법에 대해 궁금한데. 슬프게도 실제로 할 수있는 올바른 방법이 무엇인지 이해하는 데 도움이되는 것을 찾을 수 없었습니다.개체 당 복수 선택을 처리하는 가장 좋은 방법
콘텐츠 페이지가 ContentPages 인 테이블이 있다고 가정 해 보겠습니다. (페이지에 대해 무엇 나 또한 최선을 설명하는 태그를 저장하는 담당 테이블 ContentPagesTags을 가지고 테이블 ContentPages뿐만 아니라,
PageID
PageTitle
PageContent
이제이 테이블에는 다음과 같은 필드로 구성 이 바로 웹 사이트처럼 - stackoverflow, 질문에 특정 태그를 적용 할 수있는 곳). ContentPagesTags 테이블은 다음 필드로 구성
PageID
TagID
ContentPagesTags 표는 페이지 및 첨부 된 태그 사이의 관계를 담당하고있다. TagID 필드는 마지막 테이블 PageTags에서 가져온 것으로, 여기에는 콘텐츠 페이지에 적용 할 수있는 모든 태그가 저장됩니다. 마지막 테이블 구조는 다음과 같습니다.
TagID
TagTitle
꽤 많이 있습니다. 이제, 언제든지 ContentPage 개체를 검색하여 데이터 테이블에서 필요한 정보를 추출 할 때마다 관련된 모든 태그의 배열을로드하려고합니다. 기본적으로 내가 지금까지 해왔 던 것을 내 목표 달성하기 위해 두 개의 쿼리를 실행 :
SELECT * FROM ContentPages
을 그리고 다음 ContentPage 개체를 반환하기 전에 각 페이지마다 다음 쿼리를 실행 :
SELECT * FROM ContentPagesTags WHERE PageID = @PageID
을 PageID은 현재 페이지의 ID이며 객체를 구축 중입니다.
모든 내용을 요약하기 위해 필요한 정보를 모두 검색하기 위해 각 콘텐츠 페이지 개체 당 두 개의 쿼리를 실행하고 있습니다. 이 특정 예제에서는 하나의 테이블에서 정보를 추출하기 위해 수행 한 작업 만 보여 주었지만 시간이 지나면 필자는 필요한 정보를 얻기 위해 각 개체마다 여러 쿼리를 실행하고 있습니다 (예 : 페이지 태그 이외의 또한 페이지 주석, 페이지 초안 및 필요한 것으로 생각되는 추가 정보를 선택하려는 경우). 결과적으로 여러 명령을 쿼리 할 수있게되어 내 웹 응용 프로그램이 예상보다 훨씬 느리게 실행됩니다.
나는 그러한 작업을 처리하는 더 빠르고, 더 효율적인 방법이 있다고 확신한다. 다른 SQL 선택에 관한 나의 지식을 향상시키고 각 객체마다 다중 선택을하지 않고도 사용자가 요청한 엄청난 양의 데이터를 처리하는 방법에 대해이 주제를 다룰 때 기쁜 마음입니다.
이전에 저장 프로 시저를 사용할 기회가 없었습니다. 당신의 대답은 타자를 치고 설명하는 것이지만, 실종 된 것이 하나 있습니다. 예를 들어 3 개의 태그와 3 개의 서로 다른 주석을 사용하여 한 페이지를 선택할 때 데이터 행이 어떻게 표시되는지에 대한 짧은 예를 보여주기 위해 원래의 대답을 변경할 수 있다면 매우 기쁩니다. 지금까지 SqlDataReader를 통해 행을 가져 왔을 때 다음 페이지로 이동하기위한 것이었지만 페이지 주석과 태그를 통해 가져 오기를 제안하는 것으로 나타났습니다. 네가 조금이라도 전시 할 수 있다면 너는 아주 친절 하리라. –
이전 의견에 대한 제의 요청에도 불구하고 귀하의 의견에 감사드립니다. –
@ TommyNaidich : 환영합니다. 예, 업데이트 할 수 있지만 여러 가지 결과 집합 (SQL Server의 M.A.R.S. 기능이 아닌 다중 ** 활성 ** 결과 집합)은 저장 프로 시저에만 해당되지 않습니다. SqlCommand를 통해 여러 개의 매개 변수화 된 SELECT 문을 발행 할 수도 있습니다 (예 : "SELECT 1; SELECT 2;"는 두 개의 결과 집합 임). DataSet을 사용하지 않지만 이와 같은 쿼리에서 DataSet을로드하면 결과 집합당 하나의 DataTable을 얻을 수 있습니다. –