다음을 통해 공유


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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