2009-09-21 3 views
2

SQL 서버에 액세스하는 소프트웨어를 작성하는 방법을 배우기 시작했습니다. 각 서버 구현 (Postgres, MySQL 등)은 다양한 언어에 대한 API 라이브러리를 제공합니다 (Java 및 Python 용 솔루션이 관심을 갖지만 C 및 C++에 대한 코드가 있음). 그러나 나는 벤더 중립적 인 솔루션을 선호하기 때문에이 라이브러리에 의존하는 것에 조금주의를 기울이고 있습니다.SQL API 라이브러리를 선택하려고 시도했습니다.

내가 말할 수있는 바로는 Microsoft의 ODBC API는 C/C++ (Java 용 JDBC)와 같은 문제를 해결하기위한 것입니다. unixODBC가 인기있는 구현 인 것 같습니다. 지금까지 내가 옳은가요?

또한 이러한 라이브러리는 객체 지향 인터페이스를 제공합니까? SQL 질의를 다른 기능 언어에 단순히 포함시키지 않는 것이 좋을 것입니다. 나머지 언어 스타일을 모방 한 래퍼를 만들고 싶습니다.

그렇다면 그 해결책이 있습니까? 나는 이상한 것을 요구하고 있는가?

답변

0

사실 ODBC/JDBC는 벤더 간 호출 인터페이스 표준을 만드는 데 도움이되는 라이브러리이지만 각각의 RDBMS에는 고유 한 SQL 형식이 있습니다. ODBC/JDBC는 SQL 구문을 추상화하는 데 도움이되지 않습니다.

응용 프로그램 코드에서 리터럴 SQL을 이동하는 한 가지 해결책은 각 데이터베이스 백엔드에 상주하는 저장 프로 시저에 쿼리를 구현 한 다음 ODBC/JDBC를 사용하여 저장 프로 시저를 호출하는 것입니다. 비슷한 이름을 가진 저장 프로 시저를 정의하고 사용하는 RDBMS의 각 flavor에 대한 호출 인터페이스를 정의 할 수 있습니다. 그러나 저장 프로 시저 언어는 한 공급 업체에서 다음 공급 업체까지 다양합니다.

다른 해결책은 Java 용 Hibernate 또는 .NET 용 NHibernate와 같은 "객체 관계형 매핑"기술을 사용하는 것입니다. 이러한 기술은 데이터베이스와 함께 작동하는 "객체 지향"을 느끼게하고 많은 경우 리터럴 SQL을 작성할 필요가 없습니다.

하지만 대부분의 ORM 도구는 매우 간단한 쿼리에만 집중하는 경향이 있습니다. 쿼리가 모두 복잡한 경우 (예 : GROUP BY 또는 JOIN을 사용하는 경우) ORM 도구를 사용하면 은 리터럴 SQL보다 더 두껍게입니다. SQL 그 정도를 괴롭히는 경우

는 페이지의 "Good ORM for C++ solutions?"

, 당신은 아마 전혀 RDBMS를 사용하여 행복하지 않을거야. 일부 프로그래머는 정규화 규칙에 대한 가치를 보지 못합니다.그런 당신을 위해 사실이라면, 당신은 다음과 같은 비 관계형 데이터 저장소에 대한 새로운 기술을 조사 할 수 있습니다 :

0

ODBC/JDBC는 일관된 프로그래밍 모델을 제공하기 위해 데이터베이스 인터페이스를 추상화하려고 시도합니다. 그러한 최소 공통 분모 인터페이스를 사용하면 특정 DB가 제공 할 수있는 특정 비표준 기능을 이용할 수 없다는 점에 유의하십시오.

데이터 모델에 대한 객체 지향 인터페이스를 얻으려면 Hibernate과 같은 객체 관계 매핑 (ORM) 솔루션을 살펴보십시오. ORM 솔루션은 개체를 관계형 데이터베이스의 표현에 매핑하므로 일반적으로 응용 프로그램 프로그래밍 관점에서 데이터 지속성을 훨씬 단순하게 만듭니다.

1

을 같이 근처로 나는 말할 수있다. 마이크로 소프트의 ODBC API는 C/C++ (그리고 JDBC for Java)와 같은 문제를 해결하기위한 것이었다. unixODBC가 인기있는 구현 인 것 같습니다. 지금까지 내가 옳은가요?

예. Python 용 ODBC 또는 JDBC에 해당하는 것을 DB-API이라고합니다. Perl은 DBI라고합니다.

또한 이러한 라이브러리가 객체 지향 인터페이스를 제공합니까? SQL 질의를 다른 기능 언어에 단순히 포함시키지 않는 것이 좋을 것입니다. 나머지 언어 스타일을 모방 한 래퍼를 만들고 싶습니다.

네, 여러 언어로 이런 것들이 있습니다. C#은 LINQ이고 스몰 토크는 Roe이고 GLORP이고 파이썬은 SQLAlchemySQLObject이며 파이썬의 장고는 query power built into its ORM (Simon Willison's notes 참조)의 비트를 가지고 있습니다. Ruby에는 ActiveRecord 등이 있습니다. C++에서 무엇을 사용할지 모르지만이 방법에 접근하기 위해 많은 해킹 템플릿을 사용해야합니다.

이러한 모든 선택은 압도적 인 것처럼 보일지 모르지만, 언어 선택은 관계형 데이터로 작업하는 것 이외의 다른 방법으로 형성 될 가능성이 있습니다. (그렇지 않다면 Prolog를 고려해야합니다.) 아마도 우리 중 나머지 사람들처럼 당신이 싫어하는 ORM에 당신을 어느 정도 묶을 것입니다.

0

Quince는 C++ 구문 및 C++ 형식을 SQL의 기능 집합과 함께 사용할 수있게 해주는 C++ 라이브러리입니다. 현재 PostgreSQL 및 sqlite 만 지원하지만 새로운 백엔드를 항상 추가 할 수 있습니다. quince-lib.com을 참조하십시오. (전체 공개 : 나는 그것을 썼다.)

관련 문제