2009-05-12 2 views
5

저장 프로 시저를 사용하는 경우 ORM을 사용할 수 있습니까?저장 프로 시저를 사용하는 경우 ORM을 사용합니까?

편집 :

내가 ORM을 사용할 수있는 경우, 수행이 아니라 ORM을 사용하는 데이터베이스 agnosticity 이유의 패배 부분? 즉, 저장된 프로 시저가있는 특정 데이터베이스에 자신을 바인딩하는 경우 ORM을 사용해야하는 이유는 무엇입니까 (또는 그 가정이 잘못 되었습니까?).

답변

7

ORM을 사용하여 저장 프로 시저에 액세스하는 것이 ORM을 사용하는 최선의 방법 중 하나입니다. 강력하게 형식화 된 객체를 제공하지만 SQL을 완전히 제어 할 수 있습니다.

+0

+1 "강력한 형식의 개체" – Jagd

+0

강하게 입력 된 언어는 어느 것이 좋습니다. PHP와 같은 것을 사용할 때는 매개 변수를 확인하는 코드가 필요합니다. Thats는 ORM이나 코드 생성기를 사용할 수 없다는 것을 의미하지 않습니다. 예제 : Postgresql 함수에 대한 액세스 래퍼를 작성하고 SOAP 웹 서비스로 노출시키는 코드 생성기를 개발했습니다. 스칼라 매개 변수를 검사하기 위해 여분의 코드를 작성하고 싶지 않았기 때문에 PHP가 스칼라 유형 힌트 (https://github.com/sylnsr/pgfunc2php/blob/master/pgsupport.lib)를 지원하지 않기 때문에 함수를 추가했습니다. .php) –

2

모든 주 ORM은 저장 프로 시저를 지원합니다.

귀하의 가정에서 볼 때 ORM과 함께 저장 프로 시저를 사용하면 프로젝트를 특정 데이터베이스에 연결할 수 있습니다. 그러나 실제로 데이터베이스 공급자를 변경할 필요가없는 것은 99 %이므로이 경우 ORM을 사용하여 구체적인 DB 공급자에서 추상화하지 않고 ORM의 주요 작업 인 객체 관계형 매핑 작업을 돕습니다. ORM은 원래 만들어졌다.

0

더 많은 고급 ORM 기능을 사용할 수 있지만 사용하기가 더 어려워지는 경향이 있습니다. iBatis과 같은 것은 스토어드 프로 시저와 통합하기가 매우 쉽지만 동적 SQL 생성과 큰 필드의 게으른로드와 같은 (N?) Hibernate와 같은 더 복잡한 엔진의 더 정교한 기능은 가치가있는 것보다 더 많은 번거 로움이 될 수 있습니다.

2

흥미로운 점이 제기됩니다.

ORM과 비교적 간단한 쿼리가 있으면 저장 프로 시저가 필요한 이유는 무엇입니까? SP는 데이터베이스와 밀접하게 연결되어 있습니다. ORM을 사용하면 많은 DB 관련 코드를 유지하지 않아도됩니다. 특정 DB를 격리하고 관리 할 수 ​​있습니다.

나는 ORM이 복잡성을 줄이고 그것이 속한 코드에 모든 처리를 넣을 수있는 좋은 기회라고 제안한다.

데이터를 저장하는 데 가장 좋은 방법으로 데이터베이스를 사용하십시오.

애플리케이션을 사용하여 데이터를 가장 잘 처리 할 수 ​​있습니다.

+0

큰 논쟁이 아니니? SP 대 SP가 없습니다. – johnny

+0

옛날 방식 대 새로운 방식 – IAdapter

+1

어떤 사람들은 그것을 토론하고 싶어합니다.우리 중 다른 사람들은 깨진 저장 프로 시저를 유지하고 쓰레기통을 유발하는 데 지쳤습니다. ORM이 SP의 복잡성에서 해방한다는 생각은 우리 중 일부에게 매우 매력적입니다. –

3

제 경험상 ORM이 'CRUD'작업을 처리하고 특수 작업을 저장 프로 시저에 맡깁니다. 일반적으로 'CRUD'작업에 저장 프로 시저를 사용하면 잔인하며 ORM에서 처리하도록하면 생산성이 크게 향상 될 수 있습니다.

1

예, 그렇지만 ORM이 저장 프로 시저와 관련하여 제공하는 기능을 조사하는 데 시간을 할애 할 수 있습니다.

대부분은 강력한 형식의 개체/엔터티를 반환하는 저장 프로 시저를 실행할 수 있습니다. 고급 ORM을 사용하면 CRUD 작업을 수행하기 위해 저장 프로 시저를 연결할 수 있습니다 (일반적인 쿼리, 삭제 등은 동적 쿼리가 아닌 저장 프로 시저를 통해 수행됩니다).

일반적으로 ORM은 임시 쿼리를 생성하고 강력한 형식의 엔티티를 가져 오는 데 적합하지만 강력한 저장 프로 시저 지원을 사용하면 처음부터 노출되지 않을 수있는 RDMS의 고유 기능에보다 쉽게 ​​액세스 할 수 있습니다 특히 ORM이 많은 데이터베이스 엔진을 지원하는 경우에는 ORM의 고급 시민이 될 수 있습니다.

당신의 편집로부터 다음과 같습니다

은 종종 당신은 특별한 광고 나 언급으로 그러나 ORM에 의해 제공되는 쿼리 엔진을 사용하는 것이 좋습니다 이전 - 때때로 당신은 ORM에서 노출되지 않은 기능을 사용하여 조회 할 .

강하게 입력 된 엔티티의 이점은 데이터 판독기, 데이터 테이블 등이 아니라 일반적으로 도메인 개체를 사용한다는 점에서 매우 중요합니다. 검색 한 엔티티 내에서 동작과 논리를 깨끗하게 요약 할 수 있습니다.

LightSpeed ​​ORM (및 대부분의 경우)에서 엔티티는 표준 바인딩 인터페이스, 오류보고 인터페이스, 유효성 검사 등을 지원할 것이므로 추가 혜택 목록은 매우 오래갑니다. 질의 측면에서 게으른 로딩 등 당신이 직접 쓰지 않는 한.

1

데이터베이스 "침묵성"(?)이 ORM을 사용하는 유일한 이유는 아닙니다. 그러나 DB와의 상호 작용의 99 %와 속도/명료성/복잡성을 위해 저장 프로 시저가 필요한 1 % (또는 2 % 또는 10 % 또는 기타)에서 DB 독립적이라는 이점을 활용할 수 있습니다. DB를 변경했다면 DB를 다시 작성해야합니다.

1

나는 직장에서 많은 넷 티어를 사용하고 우리가 우리를 위해 스토어드 프로 시저를 생성하도록했습니다. 이것들은 기본 CRUD 작업 만 처리하지만, 매우 빠르며 시간을 절약 할 수 있습니다. netTiers를 사용하면 이러한 저장 프로 시저로 사용자 지정 저장 프로 시저를 만들고 데이터 액세스 코드를 생성 할 수 있습니다.

2

ORM 기능과 저장 프로 시저 기능을 동시에 사용할 수 있습니다. 특히 ORM을 사용하기 전에는 ORM을 사용하십시오. 그러나 성능에 문제가 있거나 저수준 튜닝이 필요한 경우 비즈니스 논리에 저장 프로 시저를 포함하십시오.

0

나는 작업을 다시하고 그 문제를 해결하는데 집중할 수있는 도구가 모두 유효하다고 믿습니다. ORM은 기본 CRUD 작업을 수행 할 때 도구로 보입니다. SP를 사용하여 요구 사항을 더 잘 구현하는 경우에도 (예 : 못에 해머를 사용하는 것처럼 작업에 적합한 도구 일 수 있습니다.)

요점은 : 검정색이나 흰색이없고 단지 회색조입니다. 매우 미숙하고 잘못 코딩 된 응용 프로그램은 DB 자원의 과도한 사용을 설명하기 위해 'DB 불가 지론'이라는 구실을 사용합니다. 많은 경우 데이터베이스에 매우 묶여있는 것이 좋지 않습니다. 목표는 고객의 IT 자원을 낭비하지 않으면 서 최대 'DB 불가지론'을 얻는 것입니다.

극단적 인 '순수한'접근법이 더 좋다고 말하는 사람들은 '오래된 것과 새로운 것'이 없습니다. 나는 그렇게 믿지 않는다. 나는 모든 도구와 마찬가지로 '최상의'(따옴표 사용) 방식은 ORM을 사용하여 데이터 액세스를위한 올바른 도구가 될 때까지 사용한다고 믿습니다. 그리고 자원을 낭비하고 확장 성 및 '가치있는 삶'(포르투갈어 'vida útil'에 해당하는 영어 표현을 잊어 버렸습니다)을 줄이는 시점에 도달하면 ORM 내부의 SP를 사용하십시오. 또는 다른 말로하면 손톱을위한 망치의 손을 처리 할 때 SP를 사용하십시오.

관련 문제