복붙노트

[SQL] 코드에 비해 저장 프로세서 수에 SQL을 유지하는 장점과 단점은 무엇입니까 [마감]

SQL

코드에 비해 저장 프로세서 수에 SQL을 유지하는 장점과 단점은 무엇입니까 [마감]

당신의 C # 소스 코드 또는 저장 프로세서 수에 SQL을 유지하는 장점 / 단점은 무엇입니까? 나는 우리가 (C # ASP.NET 포럼) 작업을하고 있다는 오픈 소스 프로젝트에 친구와 함께이 문제를 논의했습니다. 지금이 순간, 데이터베이스 액세스의 대부분은 C #에서 SQL 인라인을 구축하고, SQL 서버 DB를 호출하여 수행됩니다. 나는 확립하기 위해 노력하고있어 그래서하는이 특정 프로젝트에 대해, 가장 좋은 것입니다.

지금까지 내가 가진 :

코드에 대한 장점 :

저장 프로세서 수에 대한 장점 :

해결법

  1. ==============================

    1.내가 저장 프로 시저의 팬이 아니다

    내가 저장 프로 시저의 팬이 아니다

    데이터 유형이 변경 될 때 당신은 어쨌든 그것을 다시 컴파일 될 겁니다, 또는 당신은 여분의 열, 또는 무엇이든을 반환합니다. 당신이 '투명'앱이 아래에서 밖으로 SQL을 변경할 수있는 횟수는 전체 꽤 작

    프로그래밍 언어는 C # 포함, 함수 호출이 놀라운 일을 보유하고 있습니다. 그것은 당신이 여러 곳에서 동일한 코드 블록을 호출 할 수 있다는 것을 의미합니다! 놀랄 만한! 그런 다음 이들 중 하나 내부의 재사용 가능한 SQL 코드를 넣을 수 있습니다, 또는 당신이 정말로 첨단 기술을 받기를 원한다면, 당신은 당신을 위해 그것을 수행하는 라이브러리를 사용할 수 있습니다. 나는 그들이있는 거라는 객체 관계형 매퍼를 믿고, 요즘 꽤 일반적이다.

    storedprocs 나쁜 일 이유 인 합의. 그것은으로 ... SQL 블록 SQL보다는 기능에 코드 리팩토링 및 분해되어 (작은 부분으로 나누기)에 훨씬 쉽게?

    왜 중앙 데이터베이스에 직접 연결하여 Windows 응용 프로그램은 무엇입니까? 그것은 바로 거대한 보안 구멍 같은 것, 그리고 병목 현상은 서버 측 캐싱을 배제한다. 그들은 당신의 웹 서버에 웹 서비스 또는 유사한 통해 연결되지 하는가?

    그래서, 한 새로운 sproc에, 또는 4 개 개의 새로운 웹 서버를 밀어?

    이 경우에는 하나의 새로운 sproc에 밀어 쉽게,하지만 내 경험으로 '밀어 변화'의 95 %는 코드가 아닌 데이터베이스에 영향을 미칩니다. 데이터베이스에 1을 그 달에 웹 서버에 20 일을 밀어하고 있다면, 당신은 거의 잃게 많은 대신 데이터베이스에 웹 서버에 21 일을 밀어 제로합니다.

    당신은 어떻게 설명 할 수 있습니까? 나는 이것을하지 않습니다. sprocs가 아마 소스 제어에없는로서 특히보고, 따라서 등 웹 기반 SCM 브라우저를 통해 액세스 할 수 없습니다.

    Storedprocs는 블랙 박스로 외부 세계에 표시되는 데이터베이스에 살고 있습니다. 소스 컨트롤에 넣어하고자하는 같은 간단한 일이 악몽이된다.

    깎아 지른듯한 노력의 문제도있다. 당신이 좀 포럼을 구축 할 7 백만 달러의 비용 왜 CEO를 정당화하려고하지만, 그 모든 작은 일에 대한 StoredProc가를 만드는 경우없이 단지 추가 donkeywork입니다 아래 백만 계층으로 브레이크 모두에 적합 할 수 있습니다 이익.

  2. ==============================

    2.이 여기에 현재 몇 가지 다른 스레드에서 논의되고있다. LINQ to SQL은 대한 좋은 인수 제시되고 있지만, 나는, 저장 프로 시저의 일관된 지지자입니다.

    이 여기에 현재 몇 가지 다른 스레드에서 논의되고있다. LINQ to SQL은 대한 좋은 인수 제시되고 있지만, 나는, 저장 프로 시저의 일관된 지지자입니다.

    데이터 모델에 단단히 코드 커플에서 당신을 쿼리를 포함하기. 저장된 절차는 DBA 데이터 모델 및 절차의 코드 오랫동안 저장 프로 시저의 입력과 출력에 의해 표시되는 계약을 유지하면서 변화하는 자유를 갖는 것을 의미 계약 프로그래밍 양호한 형태이다.

    쿼리가 쉽게 위치를 관리하는 코드에 묻혀 아니라 하나의 중앙 때 튜닝 생산 데이터베이스는 매우 어려울 수 있습니다.

    [편집 여기서 다른 현재 논의는

  3. ==============================

    3.내 생각에 당신은이 질문에 '예'또는 '아니오'에 대한 투표를 할 수 없습니다. 그것은 완전히 응용 프로그램의 설계에 따라 달라집니다.

    내 생각에 당신은이 질문에 '예'또는 '아니오'에 대한 투표를 할 수 없습니다. 그것은 완전히 응용 프로그램의 설계에 따라 달라집니다.

    난 완전히 당신이 앞에 응용 프로그램 서버가 3 티어 환경에서의 SP의 사용에 대해 투표. 이러한 환경에서 응용 프로그램 서버가 귀하의 비즈니스 로직을 실행할 수있다. 당신은 추가의 SP를 사용하는 경우 모든 시스템을 통해 비즈니스 로직의 구현을 배포 시작하고 무엇에 대한 책임이 누구 매우 불분명 될 것입니다. 결국 당신은 아무것도하지만, 다음을 수행하지 기본적됩니다 응용 프로그램 서버로 끝날 것입니다 :

    (Pseudocode)
    
    Function createOrder(Order yourOrder) 
    Begin
      Call SP_createOrder(yourOrder)
    End
    

    그래서 당신은 당신의 중간 계층이 실행 한 끝에 매우 16 개의 CPU를 장착 그들 각각의 클러스터 4 서버를 냉각 실제로 전혀 아무것도 할 것입니다! 무슨 낭비!

    당신이 직접 DB 또는 어쩌면 더 많은 응용 프로그램에 연결하는 지방 GUI 클라이언트가있는 경우는 다른 이야기입니다. 이 상황에서의 SP 데이터 모델 및 이벤트 제어 가능한 액세스에서 응용 프로그램을 분리시켜 의사 중간 계층의 일종 역할을 할 수 있습니다.

  4. ==============================

    4.사실, 난 당신이 그 뒤로이 생각합니다. 이럴 코드에서 SQL이 때문에을 유지하기 위해 고통입니다 :

    사실, 난 당신이 그 뒤로이 생각합니다. 이럴 코드에서 SQL이 때문에을 유지하기 위해 고통입니다 :

    데이터베이스 오브젝트에서 호출 방법으로 procs 저장 생각 - 그들은 재사용에 훨씬 쉽게, 당신은 변경 DB 제공 할 것으로 변경 사항이 저장 프로세서 수에 일이 아니라 코드 편집에 대한 이벤트 만 한 곳이 .

    즉 스투 내 앞에 말했다 당신이 (아직) 저장 프로 시저에 중단 점을 넣을 수 없습니다로 저장 발동의 성능 향상이 미미했다.

  5. ==============================

    5.WITH

    WITH

    그것은 당신의 행동 스케일링에 올 때, 당신의 DB 서버 경직성의 단일 지점 만들 것 내부 저장 프로 시저를 처리하는 일을 많이 찾을 수 있습니다.

    그러나 SQL 서버 반대로 프로그램에서 재정, 당신이 더 당신은 당신의 코드를 실행하는 여러 대의 서버를 구성 할 경우 확장 할 수 있습니다하는 모든 일을. 물론-이 저장된 경우에만 정상적인 인출 않음을 발동하거나 업데이트에 있지만 데이터 세트를 통해 반복과 같은 처리를 더 수행하는 사람에 적용되지 않습니다.

  6. ==============================

    6.저장 프로 시저의 성능 이점은 종종 무시할 수있다.

    저장 프로 시저의 성능 이점은 종종 무시할 수있다.

    저장 프로 시저에 대한 더 많은 장점 :

  7. ==============================

    7.나는 코드면에가. 우리 모두는 모든 응용 프로그램 (웹 및 클라이언트 모두)에 의해 사용되는 데이터 액세스 레이어를 구축, 그 관점에서 그것의 DRY 때문에. 우리가 확인 테이블 스키마의이 올바른지 확인해야하기 때문에 데이터베이스 배포를 간소화합니다. 그것은 단순화 코드 유지 보수 우리는 소스 코드와 데이터베이스에서 볼 필요가 없습니다 때문입니다.

    나는 코드면에가. 우리 모두는 모든 응용 프로그램 (웹 및 클라이언트 모두)에 의해 사용되는 데이터 액세스 레이어를 구축, 그 관점에서 그것의 DRY 때문에. 우리가 확인 테이블 스키마의이 올바른지 확인해야하기 때문에 데이터베이스 배포를 간소화합니다. 그것은 단순화 코드 유지 보수 우리는 소스 코드와 데이터베이스에서 볼 필요가 없습니다 때문입니다.

    나는 그것이 정말 그 커플 링을 파기 할 가능성이 어디에 표시되지 않습니다 때문에 데이터 모델과의 긴밀한 결합으로 많은 문제가 없습니다. 응용 프로그램 및 데이터는 본질적으로 연결된다.

  8. ==============================

    8.저장 프로 시저.

    저장 프로 시저.

    오류가 미끄러 또는 논리가 약간 변경하면 프로젝트를 다시 컴파일 할 필요가 없습니다. 게다가, 그것은뿐만 아니라 한 곳 당신은 당신의 프로젝트에서 쿼리를 코딩, 서로 다른 소스에서 액세스 할 수 있습니다.

    난 당신이 데이터베이스에 있지만 첫째, 당신은 단지 DB는 셋업 할 필요가 무엇에 실행할 수 있습니다 별도의 파일에서 직접 코드를해야하지, 그것은 저장 프로 시저를 유지하기 위해 어렵게 생각하지 않습니다.

  9. ==============================

    9.저장 프로 시저에 대한 장점 :

    저장 프로 시저에 대한 장점 :

    더 쉽게 코드를 검토했다.

    덜 때문에 더 쉽게 테스트 결합.

    더 쉽게 조정.

    성능은 일반적으로 더 나은, 네트워크 트래픽의 관점에서 - 당신은 커서, 또는 유사한있는 경우, 데이터베이스에 여러 여행이 아니다

    이 또한 상대적으로 신속하게 코드를 업데이트하는 테이블을 찾을 수 있습니다 - 당신은 발동을 통해 보안을 적용, 테이블에 직접 액세스를 제거, 더 쉽게 데이터에 대한 액세스를 보호 할 수 있습니다.

    (예 : 서비스보고 등)과 관련된 다른 서비스가있는 경우, 당신은 쉽게 오히려 코드보다, 저장 프로 시저에 모든 로직을 저장하기 위해 찾을 수 있으며, 필요하면 중복

    단점 :

    스크립트의 버전 관리 : 열심히 개발자를 위해 관리하는 모든 사람들이 자신의 데이터베이스가 않습니다, 데이터베이스 및 IDE와 통합 된 버전 관리 시스템은?

  10. ==============================

    10.어떤 경우에는 코드에서 동적으로 생성 된 SQL 저장 프로 시저보다 더 나은 성능을 가질 수 있습니다. 저장 프로 시저를 만든 경우가 매우 유연해야하기 때문에 매우 매개 변수의 수십 복잡해진다, 당신은 아마 런타임에 코드에서 훨씬 간단 SQL 문을 생성 할 수 있습니다 (하자가 sp_customersearch 말).

    어떤 경우에는 코드에서 동적으로 생성 된 SQL 저장 프로 시저보다 더 나은 성능을 가질 수 있습니다. 저장 프로 시저를 만든 경우가 매우 유연해야하기 때문에 매우 매개 변수의 수십 복잡해진다, 당신은 아마 런타임에 코드에서 훨씬 간단 SQL 문을 생성 할 수 있습니다 (하자가 sp_customersearch 말).

    하나는이 단순히 웹 서버에 SQL에서 일부 처리를 이동하는 것을 주장 할 수 있지만, 일반적으로 그것은 좋은 일이 될 것입니다.

    이 기술에 대한 또 다른 좋은 점은 당신이 SQL 프로파일 러에서 찾고 있다면 당신은 당신이 생성 된 쿼리 및 20 개 매개 변수에 와서 함께 저장된 프로 시저 호출을 보는 것보다 훨씬 쉽게 디버깅을 볼 수 있다는 것입니다.

  11. ==============================

    11.내가 저장 발동, 내가 응용 프로그램에 다운 타임을 생산하지 않은 저장 프로 시저를 사용하여 응용 프로그램을 변경을 할 수 있었다 얼마나 많은 시간을 해달라고 노하우를 좋아한다.

    내가 저장 발동, 내가 응용 프로그램에 다운 타임을 생산하지 않은 저장 프로 시저를 사용하여 응용 프로그램을 변경을 할 수 있었다 얼마나 많은 시간을 해달라고 노하우를 좋아한다.

    큰 쿼리를 튜닝 거래 SQL의 큰 팬은 나에게 매우 유용하다는 것을 입증했다. 가지고는 육년에 대한 어떠한 인라인 SQL을 작성하지!

  12. ==============================

    12.당신은 sprocs가 2 프로 포인트를 나열 :

    당신은 sprocs가 2 프로 포인트를 나열 :

    실적 - 정말. SQL 2000 이상에서 쿼리 계획 최적화 꽤 좋은, 그리고 캐시됩니다. 나는 확실히 오라클 등이 유사한 일을하는 것이입니다. 나는 더 이상 성능 sprocs가의 경우가 생각하지 않습니다.

    보안? 왜 sprocs가 더 안전 할 것인가? 어쨌든 꽤 안전하지 않은 데이터베이스가없는 한 모든 액세스는 DBA가 나 응용 프로그램을 통해 될 것입니다. 항상 모든 쿼리 parametrise - 사용자 입력에서 결코 인라인 뭔가를 당신은 괜찮을거야.

    즉 어쨌든 성능을위한 가장 좋은 방법입니다.

    LINQ는 확실히 내가 지금 새 프로젝트에 가고 싶어하는 방법입니다. 이 유사한 게시물을 참조하십시오.

  13. ==============================

    13.@Keith

    @Keith

    Komradekatz에 의해 제안으로, 당신은 단지 SP의 액세스를 허용합니다 (DB에 연결이있는 사용자 이름 / 암호 콤보 용) 테이블에 대한 액세스를 허용하지 않을 수 있습니다. 그런 식으로 누군가가 당신의 데이터베이스에 사용자 이름과 암호를 얻는 경우에 그들은 SP의 실행 수 있지만 테이블 또는 DB의 다른 부분에 액세스 할 수 없습니다.

    (물론 sprocs가를 실행하는 것은 그들에게 그들이 필요로하는 모든 데이터를 제공 할 수 있지만,이 사용할 수 있었던 sprocs가에 달려 중. 테이블에 접근을주는 것은 모두에 액세스 할 수 있습니다.)

  14. ==============================

    14.이런 식으로 생각

    이런 식으로 생각

    당신은 4 개 웹 서버와 같은 SQL 코드를 사용하는 Windows 응용 프로그램의 무리가 이제 SQL 코드와 작은 문제가 실현 그래서 오히려 당신을 ...... 한 자리에 PROC 변경 또는 모든 웹 서버에 코드를 누르면 모든 창 상자에있는 모든 데스크톱 응용 프로그램 (의 ClickOnce 힘 도움말)를 다시 설치

    내가 저장 발동를 선호

    발동에 대해 성능 테스트를 할 쿼리 분석기에 넣어도 쉽게 세트 통계에 / 시간을 io를 짜잔에 세트 SHOWPLAN_TEXT

    어떤 실행 프로파일에 필요가 정확히 무엇을 호출되고 볼 수 있습니다

    그냥 내 2 센트

  15. ==============================

    15.나는 코드에서에두고 선호 (인라인, ORM을 사용하지 않거나 임시)가 .SQL 파일을 저장 처리하지 않고 소스 제어에 포함하고 있으므로.

    나는 코드에서에두고 선호 (인라인, ORM을 사용하지 않거나 임시)가 .SQL 파일을 저장 처리하지 않고 소스 제어에 포함하고 있으므로.

    또한, 저장 프로 시저는 본질적으로 안전하지 않습니다. 당신은 인라인만큼이나 쉽게 sproc에있는 나쁜 쿼리를 작성할 수 있습니다. 매개 변수화 된 인라인 쿼리는 같은 SPROC로 확보 할 수있다.

  16. ==============================

    16.핸들 논리 : 그것은 최고의 무엇으로 앱 코드를 사용합니다. 데이터를 저장 : 그것은 최고의 무엇을 사용자 데이터베이스를.

    핸들 논리 : 그것은 최고의 무엇으로 앱 코드를 사용합니다. 데이터를 저장 : 그것은 최고의 무엇을 사용자 데이터베이스를.

    당신은 저장 프로 시저를 디버깅 할 수 있지만 코드에 디버그 및 유지 논리에보다 쉽게 ​​찾을 수 있습니다. 일반적으로 당신은 당신의 코드 데이터베이스 모델을 변경할 때마다 컴파일 종료됩니다.

    사전에 지정하기 때문에 당신이 매개 변수 월로에서 반복 될 것입니다 얼마나 많은 시간을 예측하지 못할 때문에 선택 검색 매개 변수와 또한 저장 프로 시저는 매우 모든 가능한 매개 변수와 복잡한 검색 때로는 불가능 inneficient된다.

  17. ==============================

    17.이 보안에 관해서, 저장 프로 시저가 훨씬 더 안전합니다. 일부는 모든 액세스 어쨌든 응용 프로그램을 통해 될 것이라고 주장했다. 많은 사람들이 잊고 있다는 것은 대부분의 보안 침해는 회사 내부에서 오는 것입니다. 얼마나 많은 개발자가 응용 프로그램의 "숨겨진"사용자 이름과 암호를 알고에 대한 생각?

    이 보안에 관해서, 저장 프로 시저가 훨씬 더 안전합니다. 일부는 모든 액세스 어쨌든 응용 프로그램을 통해 될 것이라고 주장했다. 많은 사람들이 잊고 있다는 것은 대부분의 보안 침해는 회사 내부에서 오는 것입니다. 얼마나 많은 개발자가 응용 프로그램의 "숨겨진"사용자 이름과 암호를 알고에 대한 생각?

    MatthieuF는 지적 또한, 성능이 훨씬 적은 라운드 응용 프로그램 사이의 여행 (그것이 데스크톱이나 웹 서버에 여부)와 데이터베이스 서버로 인해 개선 될 수있다.

    내 경험에 저장 프로 시저를 통해 데이터 모델의 추상화도 크게 유지 보수성을 향상시킨다. 단순히 저장 프로 시저 또는 두 가지를 변경하고 변경 ALL의 외부 응용 프로그램을 완전히 투명하게 가질 수 있도록 필요한 모델 변화에 직면했을 때 과거에 많은 데이터베이스를 유지했다 사람, 그것은 그러한 구호입니다. 응용 프로그램이 데이터베이스에서 하나의 뾰족한 아닌 여러 번 - 테이블에 오픈 액세스와 번거 로움이 될 수있는 그 영향을받는 모든 포인트를 추적, 그래서 등, 솔루션을보고, 다른 응용 프로그램이 있습니다.

    나는 또한 전문 사람들의 손에 SQL 프로그래밍을 퍼팅 플러스 열에서 검사를 넣어 SP를 위해 훨씬 더 쉽게 분리 및 테스트 / 최적화 코드로 쉽게 이동할 수 있습니다.

    (내가 볼 수 있다는 하나의 단점은 많은 언어가 성가신 수 있습니다 알 수없는 숫자 데이터 값을 전달, 테이블 매개 변수의 통과를 허용하지 않는다는 것입니다, 그리고 일부 언어는 여전히 하나의 저장 프로 시저에서 여러 결과 집합을 검색 처리 할 수 ​​있지만, 그런 점에서 인라인 SQL)에 비해 SP의 어떤 악화되지 않습니다 후자.

  18. ==============================

    18.내가 참석 보안에 마이크로 소프트 테크 에드 (TechEd) 세션의 제안 중 하나는, 저장 발동를 통해 모든 전화를 걸거나 테이블에 직접 액세스를 거부합니다. 이 접근법은 추가 보안을 제공하는 것으로 청구했다. 잘 모르겠어요 경우 그것의 가치가 단지 보안을 위해,하지만 당신은 이미 저장 프록을 사용하여, 그것을 해치지 않을 수 있다면.

    내가 참석 보안에 마이크로 소프트 테크 에드 (TechEd) 세션의 제안 중 하나는, 저장 발동를 통해 모든 전화를 걸거나 테이블에 직접 액세스를 거부합니다. 이 접근법은 추가 보안을 제공하는 것으로 청구했다. 잘 모르겠어요 경우 그것의 가치가 단지 보안을 위해,하지만 당신은 이미 저장 프록을 사용하여, 그것을 해치지 않을 수 있다면.

  19. ==============================

    19.저장 프로 시저에 넣어 경우 확실히 쉽게 유지합니다. 즉 잠재적으로 앞으로는 변화 관련 어려운 논리가 있다면 그것은 당신이 연결 여러 클라이언트가있을 때 데이터베이스에 넣어 좋은 아이디어는 확실히이다. 예를 들어 지금은 (명백하게) 데이터베이스를 공유 둘 다 최종 사용자 웹 인터페이스 및 관리 데스크톱 응용 프로그램을 가지고 그 응용 프로그램에서 일하고 있어요 나는 가능한 한 데이터베이스에서 많은 논리로 유지하기 위해 노력하고있어. 이것은 DRY 원칙의 완벽한 예입니다.

    저장 프로 시저에 넣어 경우 확실히 쉽게 유지합니다. 즉 잠재적으로 앞으로는 변화 관련 어려운 논리가 있다면 그것은 당신이 연결 여러 클라이언트가있을 때 데이터베이스에 넣어 좋은 아이디어는 확실히이다. 예를 들어 지금은 (명백하게) 데이터베이스를 공유 둘 다 최종 사용자 웹 인터페이스 및 관리 데스크톱 응용 프로그램을 가지고 그 응용 프로그램에서 일하고 있어요 나는 가능한 한 데이터베이스에서 많은 논리로 유지하기 위해 노력하고있어. 이것은 DRY 원칙의 완벽한 예입니다.

  20. ==============================

    20.난 당신이 속임수와 저장된 프로 시저에서 동적 SQL을 사용하지 않는 가정 저장 발동의 측면에 단단히입니다. 먼저, 저장 프록를 사용하여 저장된 PROC 수준에서 설정된 권한 DBA 아닌 테이블 레벨을 허용한다. 이것은 SQL 주입 attacts 퇴치에 있지만, 직접 데이터베이스에 액세스하고 일을 변경하는 내부 방지를 향한뿐만 아니라 중요합니다. 이 도움 방지 사기 방법입니다. 개인 정보 (사회 보장 번호 (SSN), 신용 카드 번호 등) 또는 어쨌든에서 것을 포함 없음 데이터베이스는 금융 거래 적 strored 절차를 통해 제외 액세스해야 만들지 않습니다. 당신은 당신이 가짜 금융 거래를 만들거나 신원 도용에 사용할 수있는 데이터를 훔치는 회사의 개인 활짝 열려 데이터베이스를 떠나 다른 방법을 사용하는 경우.

    난 당신이 속임수와 저장된 프로 시저에서 동적 SQL을 사용하지 않는 가정 저장 발동의 측면에 단단히입니다. 먼저, 저장 프록를 사용하여 저장된 PROC 수준에서 설정된 권한 DBA 아닌 테이블 레벨을 허용한다. 이것은 SQL 주입 attacts 퇴치에 있지만, 직접 데이터베이스에 액세스하고 일을 변경하는 내부 방지를 향한뿐만 아니라 중요합니다. 이 도움 방지 사기 방법입니다. 개인 정보 (사회 보장 번호 (SSN), 신용 카드 번호 등) 또는 어쨌든에서 것을 포함 없음 데이터베이스는 금융 거래 적 strored 절차를 통해 제외 액세스해야 만들지 않습니다. 당신은 당신이 가짜 금융 거래를 만들거나 신원 도용에 사용할 수있는 데이터를 훔치는 회사의 개인 활짝 열려 데이터베이스를 떠나 다른 방법을 사용하는 경우.

    저장 발동도 유지하고 SQL에 비해 성능 조정이 응용 프로그램에서 전송하는 것이 훨씬 쉽다. 그들은 또한 DBA는 데이터베이스 구조 변화의 영향이 데이터에 액세스하는 방식에 미칠 무엇을 볼 수있는 방법이 있습니다. 나는 데이터베이스에 대한 동적 액세스를 허용 할 좋은 DBA를 만난 적이.

  21. ==============================

    21.내가 지금 일하는 곳 우리는 오라클 DB의 저장 프로 시저를 사용합니다. 우리는 또한 서브 버전을 사용합니다. 모든 저장 프로 시저 .pkb & .pks 파일로 생성 및 파괴에 저장됩니다. 나는 전에 인라인 SQL을 수행 한 그것은 고통! 나는 많은 우리가 여기 그것을 할 방법을 선호합니다. 만들기 및 새 저장 프로 시저를 테스트하면 코드에서하는 것보다 훨씬 쉽다.

    내가 지금 일하는 곳 우리는 오라클 DB의 저장 프로 시저를 사용합니다. 우리는 또한 서브 버전을 사용합니다. 모든 저장 프로 시저 .pkb & .pks 파일로 생성 및 파괴에 저장됩니다. 나는 전에 인라인 SQL을 수행 한 그것은 고통! 나는 많은 우리가 여기 그것을 할 방법을 선호합니다. 만들기 및 새 저장 프로 시저를 테스트하면 코드에서하는 것보다 훨씬 쉽다.

    거기에

  22. ==============================

    22.작은 로그

    작은 로그

    언급되지 않은 저장 프로 시저에 대한 프로 또 다른 작은 : 그것은 SQL 트래픽에 관해서는, SP 기반의 데이터 액세스가 훨씬 적은 트래픽을 생성합니다. 로그가 훨씬 작고 읽을 수 - 당신은 분석 및 프로파일 링에 대한 트래픽을 모니터링 할 때 중요합니다.

  23. ==============================

    23.내가 저장 프로 시저의 큰 팬이 아니에요,하지만 난 하나 개의 조건에서 사용 :

    내가 저장 프로 시저의 큰 팬이 아니에요,하지만 난 하나 개의 조건에서 사용 :

    쿼리가 매우 큰 경우, 그것은 코드에서 보내기 대신 저장 프로 시저로 데이터베이스에 저장하는 것이 좋습니다. 그 방법은, 대신 데이터베이스에 응용 프로그램 서버에서 문자열 문자의 거대한 ammounts을 보내지 만 "EXEC SPNAME"명령이 전송됩니다.

    데이터베이스 서버와 웹 서버가 같은 네트워크에 (예를 들어, 인터넷 통신)하지 않은 경우에 과잉이다. 그리고 그 경우, 너무 많은 스트레스 수단 낭비 대역폭을 많이 아니더라도.

    그러나 사람, 그들은 관리가 너무 끔찍한. 내가 할 수있는대로 나는만큼 그들을 피하기.

  24. ==============================

    24.는 SQL 저장된 프로 시저 쿼리의 성능을 증가시키지 않습니다

    는 SQL 저장된 프로 시저 쿼리의 성능을 증가시키지 않습니다

  25. ==============================

    25.그럼 분명히 저장 프로 시저를 사용하여 코드에서 SQL을 구성 비해 몇 가지 장점을 가지고있다.

    그럼 분명히 저장 프로 시저를 사용하여 코드에서 SQL을 구성 비해 몇 가지 장점을 가지고있다.

  26. ==============================

    26.저장 프로 시저 때문에 더 유지 보수가 있습니다 :

    저장 프로 시저 때문에 더 유지 보수가 있습니다 :

    코드의 반복을 사용하면 유지 보수 응용 프로그램을 만들려고 할 때 당신이 할 수있는 최악의 일입니다!

    당신은 요구 사항이 여러 위치에서 수정 될 수 있다는 논리 오류를 발견하면 어떻게됩니까? 당신은 당신의 코드를 복사 & 붙여 넣기 마지막 자리를 변경하는 것을 잊지 것이 더 쉽다입니다.

    제 생각에는, 성능 및 보안 향상은 추가 플러스입니다. 당신은 여전히 ​​불안 / 비효율적 인 SQL 저장 프로 시저를 작성할 수 있습니다.

    그것은 다른 DB의 생성을위한 모든 저장 프로 시저에서 스크립트에 매우 어렵지 않다. 사실 - 그것은 걱정할 차 / 외래 키가 없기 때문에 테이블을 내보내는 것보다 쉽다.

  27. ==============================

    27.@Terrapin - sprocs가 마찬가지로 인젝션 공격에 취약하다. 내가 말했듯이:

    @Terrapin - sprocs가 마찬가지로 인젝션 공격에 취약하다. 내가 말했듯이:

    즉 sprocs가 및 동적 SQL에 간다.

    나는 확실하지 앱이 장점이다 컴파일 아니에요. 나는 다시 어쨌든 라이브 전에 그 코드 (응용 프로그램과 DB를 모두)에 대한 단위 테스트를 실행 한 것을 의미한다.

    @Guy - 그래 넌 오른쪽 sprocs가 당신이 응용 프로그램 사용자는 그래서 그들은 단지 SPROC 아닌 기본 활동을 수행 할 수있는 제어 할 수 없습니다.

    내 질문은 다음과 같습니다 모든 갱신에 제한 권한으로 접속 사용자를 사용하여 응용 프로그램을 통해 액세스 그것은, 경우 / 삽입 등이 추가 수준의 추가 보안 또는 별도의 관리를하지?

    내 의견은 매우 후자입니다. 그들은 그것을 다시 쓸 수있는 그들이 지점에 응용 프로그램을 손상 한 경우 그들이 사용할 수있는 다른 공격의 많음이있다.

    황금 규칙이 여전히 적용, 그래서 그들은 동적으로 인라인 코드, 모든 사용자 입력은 항상 parametrised해야하는 경우는 SQL 주입은 여전히 ​​그 sprocs가에 대해 수행 할 수 있습니다.

  28. ==============================

    28.내가 보지 못한 뭔가가 지금까지 언급 한 : 데이터베이스 최선을 알고있는 사람들이 항상 응용 프로그램 코드를 작성하는 사람이 아니다. 저장 프로 시저는 데이터베이스 사람들에게 정말 SQL에 대한 그 많은 것을 배우고 싶지 않아 프로그래머와 인터페이스 할 수있는 방법을 제공합니다. DBA가 일어날 것을 확인하기 위해 17 개 테이블을 조인하는 방법을 알아 보자 : 대형 - - 특히 기존 프로그래머는 단지 그들이 필요가 무엇을 제공하는 간단한 인터페이스를 선호 할 수 있도록 데이터베이스를 완전히 이해하는 가장 쉬운 일이 아니다.

    내가 보지 못한 뭔가가 지금까지 언급 한 : 데이터베이스 최선을 알고있는 사람들이 항상 응용 프로그램 코드를 작성하는 사람이 아니다. 저장 프로 시저는 데이터베이스 사람들에게 정말 SQL에 대한 그 많은 것을 배우고 싶지 않아 프로그래머와 인터페이스 할 수있는 방법을 제공합니다. DBA가 일어날 것을 확인하기 위해 17 개 테이블을 조인하는 방법을 알아 보자 : 대형 - - 특히 기존 프로그래머는 단지 그들이 필요가 무엇을 제공하는 간단한 인터페이스를 선호 할 수 있도록 데이터베이스를 완전히 이해하는 가장 쉬운 일이 아니다.

    그 존재는 언어 (PL / SQL 악명 높은 예이다) 꽤 잔인 저장 프로 시저를 작성하는 데 사용했다. 그들은 일반적으로 당신이 OOP, 오늘의 인기 필수적으로 볼 수있을 미묘한, 또는 기능적 언어 중 하나를 제공하지 않습니다. COBOL을 생각하십시오.

    그래서, 멀리 그 단순히 추상적 인 저장 프로 시저가 아니라 비즈니스 로직을 포함하는 것보다 관계 세부 사항에 스틱.

  29. ==============================

    29.나는 일반적으로 OO의 코드를 작성합니다. 나도, 당신의 대부분은 아마 할 것으로 생각한다. SQL 쿼리를 포함하여 - - 클래스 정의에 속하는 맥락에서 비즈니스 로직의 모든 것을 나에게 분명한 것 같다. 그것의 일부는 개체 모델에 상주 부분은 데이터베이스가되도록 논리까지 분할은 더 나은 사용자 인터페이스에 비즈니스 로직을 넣어보다 없습니다.

    나는 일반적으로 OO의 코드를 작성합니다. 나도, 당신의 대부분은 아마 할 것으로 생각한다. SQL 쿼리를 포함하여 - - 클래스 정의에 속하는 맥락에서 비즈니스 로직의 모든 것을 나에게 분명한 것 같다. 그것의 일부는 개체 모델에 상주 부분은 데이터베이스가되도록 논리까지 분할은 더 나은 사용자 인터페이스에 비즈니스 로직을 넣어보다 없습니다.

    많은 저장 발동의 보안 이점에 대해 이전 답변에서 말했다되었습니다. 두 가지 범주로이 가을 :

    1) 데이터에 직접 액세스를 제한. 당신이 하나가 발생할 때 확실히 다음 저장 발동 거의 유일한 옵션이며, 어떤 경우에 중요하다. 내 경험에 의하면, 이러한 경우 그러나 예외가 아닌 규칙이다.

    2) SQL 주입 / 쿼리 매개 변수화. 이 이의 붉은 청어입니다. 심지어 SQL 인라인 동적으로 생성 - - 인라인 SQL은 그냥 완전히 모든 저장된 프로 시저로 매개 변수화 될 수 있으며, 그것은 현대의 언어 가치의 소금 그냥 간단하게 수행 할 수 있습니다. 여기에는 장점 중 하나 방법은 없습니다. (유효한 반대가 아닌 "게으른 개발자가 매개 변수를 사용하여 귀찮게하지 않을 수 있습니다."당신이 매개 변수를 사용하는 대신 자신의 SQL에 불과 CONCATENATE 사용자 데이터 선호하는 팀에 개발자가 있다면, 당신은 먼저 교육을 시도, 당신은 그들을 해고 , 당신이 명백히 다른 나쁜 해로운 습관이 개발자 때와 같이이 작동하지 않는 경우.)

  30. ==============================

    30.나는 SPROC의 이상 코드의 거대한 후원자입니다. 수 하나의 이유는 가까운 초에 당겨하는 사용자 정의 유틸리티를 많이하지 않고 소스 제어의 용이성은, 밀접하게 결합 코드를 유지하고있다.

    나는 SPROC의 이상 코드의 거대한 후원자입니다. 수 하나의 이유는 가까운 초에 당겨하는 사용자 정의 유틸리티를 많이하지 않고 소스 제어의 용이성은, 밀접하게 결합 코드를 유지하고있다.

    우리는 매우 복잡한 SQL 문이있는 경우 우리의 DAL에서, 우리는 일반적으로 리소스 파일로 포함하고 필요에 따라 (이 등 ...하는 조립 별도뿐만 아니라, 및 DB 당으로 교체 될 수 있음)을 업데이트합니다.

    이 업데이트에 대한 일부 외부 응용 프로그램을 실행하는 "잊고"하지 않고, 우리의 코드와 같은 버전 제어에 저장되어 우리의 SQL 호출을 유지합니다.

  31. from https://stackoverflow.com/questions/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code by cc-by-sa and MIT license