사용할 데이터베이스 기능 고려

기본 수준의 상호 운용성을 알고 나면 애플리케이션에서 사용하는 데이터베이스 기능을 고려해야 합니다. 예를 들어 애플리케이션이 실행할 SQL 문은 무엇인가요? 애플리케이션에서 스크롤 가능한 커서를 사용합니까? 트랜잭션 절차? 긴 데이터? 모든 DBMS에서 지원되지 않을 수 있는 기능에 대한 자세한 내용은 SQLGetInfo, SQLSetConnectAttrSQLSetStmtAttr 함수 설명 및 부록 C: SQL Grammar을 참조하세요. 애플리케이션에 필요한 기능은 대상 DBMS 목록에서 일부 DBMS를 제거할 수 있습니다. 또한 애플리케이션이 여러 DBMS를 쉽게 대상으로 지정할 수 있음을 보여 줄 수도 있습니다.

예를 들어 필요한 기능이 간단한 경우 일반적으로 높은 수준의 상호 운용성으로 구현할 수 있습니다. 간단한 SELECT 문을 실행하고 정방향 전용 커서를 사용하여 결과를 검색하는 애플리케이션은 편의상 상호 운용성이 매우 높습니다. 거의 모든 드라이버와 DBMS가 필요한 기능을 지원합니다.

그러나 스크롤 가능한 커서, 위치가 지정된 업데이트 및 삭제 문 및 프로시저와 같은 필수 기능이 더 복잡한 경우 종종 장단위를 만들어야 합니다. 여러 가능성이 있습니다.

  • 더 낮은 상호 운용성, 더 많은 기능. 애플리케이션은 기능을 포함하지만 해당 기능을 지원하는 DBMS에서만 작동합니다.

  • 더 높은 상호 운용성, 적은 기능. 애플리케이션은 기능을 삭제하지만 더 많은 DBMS에서 작동합니다.

  • 더 높은 상호 운용성, 선택적 기능. 애플리케이션은 기능을 포함하지만 해당 기능을 지원하는 DBMS에서만 사용할 수 있도록 합니다.

  • 더 높은 상호 운용성, 더 많은 기능. 애플리케이션은 해당 기능을 지원하는 DBMS와 함께 사용하고 그렇지 않은 DBMS에 대해 에뮬레이트합니다.

처음 두 경우는 기능이 지원되는 모든 DBMS와 함께 사용되거나 사용되지 않으므로 비교적 간단하게 구현할 수 있습니다. 반면에 후자의 두 경우는 더 복잡합니다. 두 경우 모두 DBMS가 기능을 지원하는지 여부를 확인하고 마지막 경우 이러한 기능을 에뮬레이트하기 위해 잠재적으로 많은 양의 코드를 작성해야 합니다. 따라서 이러한 스키마는 더 많은 개발 시간이 필요할 수 있으며 런타임에 속도가 느려질 수 있습니다.

단일 데이터 원본에 연결할 수 있는 일반 쿼리 애플리케이션을 고려합니다. 애플리케이션은 사용자의 쿼리를 수락하고 창에 결과를 표시합니다. 이제 이 애플리케이션에 사용자가 여러 쿼리의 결과를 동시에 표시할 수 있는 하나의 기능이 있다고 가정해 보겠습니다. 즉, 쿼리를 실행하고 일부 결과를 확인하고, 다른 쿼리를 실행하고, 일부 결과를 살펴본 다음, 첫 번째 쿼리로 돌아갈 수 있습니다. 일부 드라이버가 단일 활성 명령문만을 지원하기 때문에 상호 운용성의 문제가 발생합니다.

애플리케이션에는 SQLGetInfo의 SQL_MAX_CONCURRENT_ACTIVITIES 옵션에 대해 드라이버가 반환하는 항목에 따라 다양한 옵션이 있습니다.

  • 항상 여러 쿼리를 지원합니다. 드라이버에 연결한 후 애플리케이션은 활성 문의 수를 확인합니다. 드라이버가 하나의 활성 문만 지원하는 경우 애플리케이션은 연결을 닫고 드라이버가 필요한 기능을 지원하지 않는다는 사실을 사용자에게 알릴 수 있습니다. 애플리케이션은 구현하기 쉽고 전체 기능을 가지고 있지만 상호 운용성이 낮습니다.

  • 여러 쿼리를 지원하지 않습니다. 애플리케이션은 기능을 완전히 삭제합니다. 구현하기 쉽고 상호 운용성이 높지만 기능이 적습니다.

  • 드라이버가 수행하는 경우에만 여러 쿼리를 지원합니다. 드라이버에 연결한 후 애플리케이션은 활성 문의 수를 확인합니다. 애플리케이션은 드라이버가 여러 개의 활성 문을 지원하는 경우에만, 이미 활성 상태의 문이 있을 때 사용자가 새로운 문을 시작할 수 있도록 합니다. 애플리케이션은 더 높은 기능과 상호 운용성을 가지고 있지만 구현하기가 어렵습니다.

  • 항상 여러 쿼리를 지원하고 필요한 경우 에뮬레이트합니다. 드라이버에 연결한 후 애플리케이션은 활성 문의 수를 확인합니다. 애플리케이션은 사용자가 이미 활성 상태일 때 항상 새 문을 시작할 수 있도록 허용합니다. 드라이버가 하나의 활성 문만 지원하는 경우 애플리케이션은 해당 드라이버에 대한 추가 연결을 열고 해당 연결에서 새 문을 실행합니다. 애플리케이션은 완전한 기능과 높은 상호 운용성을 가지고 있지만 구현하기가 어렵습니다.