JDBC 중개자 생성 조회
SQL(Structured Query Language) SELECT 명령문을 제공하지 않으면, DMS(Data Mediator Service)는 인스턴스 작성 시 제공된 메타데이터를 사용하여 생성합니다.
내부 조회 엔진은 테이블, 열, 관계, 필터 및 order-bys에 대한 정보를 메타데이터에서 사용합니다. 중개자가 DataGraph에 작성된 변경사항을 다시 데이터베이스로 커미트하면 제공된 조회로, UPDATE, DELETE 및 INSERT 명령문은 적용될 각 DataObject에 대해 자동으로 생성됩니다.
필터
필터는 매개변수 마커를 포함할 수 있는 SQL WHERE 절을 정의합니다. DataGraph SELECT 명령문 WHERE 절에 추가됩니다. 필터는 있는 그대로 사용됩니다. 구문 분석되거나 해석되지 않으므로 오류 검사는 없습니다. 잘못된 이름 또는 술어를 사용하는 경우, 발견되지 않으며 생성된 조회는 유효하지 않습니다. Filter WHERE 절이 매개변수 마커를 포함하는 경우, 해당 매개변수 이름과 유형은 Filter 인수를 사용하여 정의됩니다. 그래프가 검색되기 전에 매개변수 DataObjects는 이 매개변수를 채웁니다. 생성된 조회에 대한 Filters 및 매개변수 DataObjects의 예는 다음과 같습니다.
생성된 조회에 대한 매개변수 DataObject
// The factory is a MetadataFactory object
Filter filter = factory.createFilter();
filter.setPredicate("CUSTSTATE = ? AND CUSTZIP = ?");
FilterArgument arg0 = factory.createFilterArgument();
arg0.setName("customerState");
arg0.setType(Column.String);
queryInfo.getFilterArguments().add(arg0);
FilterArgument arg1 = factory.createFilterArgument();
arg1.setName("customerZipCode");
arg1.setType(Column.Integer);
queryInfo.getFilterArguments().add(arg1);
// custTable is the Customer Table object
custTable.setFilter(filter);
..... // setting up mediator
DataObject parameters = mediator.getParameterDataObject();
// Notice the first parameter is the name given to the
// argument by the FilterArgument.
parameter.setString("customerState", "NY");
parameter.setInt("customerZipCode", 12345);
DataObject graph = mediator.getGraph(parameters);
Order-by
// This example assumes that the custTable, a table in
// the metadata, and factory, the MetaDataFactory
// object, have already been created.
Column firstName = ((TableImpl)custTable).getColumn("CUSTFIRSTNAME");
OrderBy orderBy = factory.createOrderBy();
orderBy.setColumn(firstName);
orderBy.setAscending(true);
metadata.getOrderBys().add(orderBy);
외부 테이블
외부 테이블은 JDBC DMS에서 리턴된 DataGraph에서 필요하지 않는 메타데이터에 정의되는 테이블입니다. 테이블의 데이터를 기반으로 하는 결과 세트를 필터링할 때 적절할 수 있지만 해당 테이블의 데이터는 결과 세트에서 필요하지 않습니다. 고객과 순서 관계를 포함한 이 예는 결과 세트를 필터링하여 해당 년도의 처음 주문 날짜로 항목의 순서를 지정한 모든 고객을 리턴합니다. 이 경우, 리턴된 주문 정보를 원하지 않지만 주문 정보를 필터링할 필요가 있습니다. 주문 테이블을 외부에서 작성하면 DataGraph에서 주문 정보를 제외하므로 DataGraph 크기를 줄여 효율성을 개선시킵니다. 테이블을 외부로 지정하려면, JDBC DMS 메타데이터의 테이블 오브젝트에서 setExternal(true) 메소드를 호출합니다. 클라이언트가 DataGraph에서 외부 테이블에 액세스하려고 하면 잘못된 인수 예외가 발생합니다.
생성된 조회의 일반 제한사항
JDBC DMS에서 조회 생성 기능의 제한사항을 이해하는 데 다음 두 가지를 기억해야 합니다. 첫 번째는 DataGraph는 사이클이 포함된 간접적으로, 잠재적으로 연결이 끊긴 그래프인 관계형 모델에서 사이클을 포함하지 않은 직접적으로 연결된 그래프인 모델(즉, 트리인 모델)을 적용합니다. Directed는 개발자가 루트 테이블을 선택하여 그래프의 방향을 선택함을 의미합니다. Connected는 DataGraph의 멤버인 모든 테이블이 루트에서 접근 가능함을 의미합니다. 루트에서 접근 불가능한 테이블은 DataGraph에 포함될 수 없습니다. 테이블이 루트에서 접근 가능하도록 하려면, DataGraph의 각 테이블 쌍 사이에 정의된 하나 이상의 외부 키 관계가 있어야 합니다. No cycles는 DataGraph의 테이블 쌍 사이에 하나의 외부 키 관계만 있음을 의미합니다. DataGraph의 트리 네이처는 조회가 빌드되는 방식 및 조회에서 리턴되는 데이터를 판별합니다.
- DataGraph가 단일 테이블 또는 다중 테이블에서 구성되는지에 관계없이 JDBC DMS는 단일 결과 세트(즉, DataGraph)를 작성합니다.
- 루트에서 리프까지 DMS 메타데이터의 외부 키 관계를 통한 각 경로는 별도의 경로를 표시합니다. 해당 경로에 대한 데이터는 경로의 테이블 간에 정의된 외부 키에서 결합을 사용하여 검색됩니다. 결합은 기본적으로 내부 결합입니다.
- 중개자에서 생성된 조회로 단일 결과 세트를 작성하기 위해 DataGraph의 모든 경로는 같이 통합되므로 서로 독립적으로 처리됩니다.
- 사용자 정의 필터링은 테이블에서 처음 수행됩니다. 그런 다음 결과는 나머지 경로에 결합됩니다.
- 관계형 데이터베이스는 일반적으로 order-bys를 중간 결과가 아닌 전체 최종 결과 세트에 적용해야 합니다.