2011-04-26 3 views
2

처음 데이터베이스에 접속했을 때 SQL Server를 사용하고있었습니다. 나는 원래 고전적인 ASP로 그걸 가지고있다. 우리가 들었던 가장 큰 장점 중 하나는 ASP SQL 명령으로 작업하는 것보다는 스토어드 프로 시저를 사용하는 경우 SQL 트랜잭션에 많은 시간을 절약 할 수 있다는 것입니다. 그래서 데이터베이스로하고 싶은 거의 모든 것을 저장 프로 시저로 작성한 다음 저장 프로 시저를 호출했습니다.MySQL의 저장 함수 - 가치있는 작업?

어쨌든, 몇 년 빨리 감기와 나는 PHP와 MySQL (그리고 약간의 파이썬)으로 모든 일을하고 있습니다. 내가 많이 보지 않는 것 중 하나는 저장 프로 시저/함수를 사용하는 사람들이므로 걱정하지 않아도됩니다.

그러나 나는 그것이 잘못하고 있다는 것을 깨닫지 못합니다. MySQL에 저장된 함수를 사용하는 것이 큰 이점이 있습니까? 데이터베이스에 대한 많은 호출을 처리하는 꽤 좋은 크기의 웹 사이트를 구축하고 있습니다. 호출은 모두 내 PHP 코드로 인라인으로 처리됩니다. 필자가 일관되게 만드는 호출에 대해 저장된 함수를 사용하는 것이 더 좋을까요? 그리고 PHP에서 함수에 변수를 전달하는 것보다 낫지 않습니까?

답변

4

잘 따라 달라집니다

에 관계없이 내가 어떻게 반응하는지의이 (이 매우 사이트) 전에 죽음을 이길 된 거룩한 전쟁 문제입니다. 저장 프로시 저는 기능적 분해를 처리하는 방법이며 동일한 데이터베이스와 상호 작용하는 여러 응용 프로그램이있는 경우 절대적으로 필수적 일 수 있습니다. 2 년 전부터 모든 것을위한 저장 프로 시저를 사용한다는 아이디어는 전 세계적으로 서비스/RAD 세계로 옮겨 감에 따라 어느 정도의 근거를 잃어 가고 있습니다. 조인 15 회

저장 프로 시저의 장점 중 일부

  1. 재사용 /이 확실히 당신의 코드베이스 내에서 수행 할 수 있지만 그것은 10 부와 동일한 쿼리를 작성의 지옥을 친다

  2. 보안 - sp가 분노한 경우 SQL 주입 공격이 노출 위험을 줄이기 위해 전면에오고 한 가지 방법은 노출을 줄이기위한 것입니다.

  3. 실제로 대형 데이터베이스 테이블 레이아웃에 대한 정의에 의한 문서화로 인해 저장 대상을 설명하는 데 항상 충분하지 않으며 SP가 때로는 사용자와 사용자를 제공하는 이유를 제공하지 못합니다.

  4. 정의 된 인터페이스.

이러한 모든 장점은 훌륭한 응용 프로그램 디자인을 전제로 제공 될 수 있으며 일부 규모의 프로젝트에만 적용될 수 있다고 생각합니다.

일부 단점

  1. 중복 기능 - 나는 비즈니스 및 CRUD 로직이 애플리케이션 및 비즈니스 로직에 퍼져 상점을 많이 보았다는 데이터베이스입니다.

  2. SP의 구성 관리 부족 - 코드 SP 관리 절차 및 도구가 있지만 SP 관리가 크게 뒤떨어져 있습니다.

+0

"몇 년 전"? 나는 수년 동안 쇠퇴 해있는 것을 보았다. – Xailor

0

이 질문과 같은 질문은, "나는 방법/기능/절차에 내 코드를 중단하고 전화를 걸거나 내 현재 함수에 모든 것을 코딩해야할까요?"

저장 프로 시저를 제공 장점 중 일부

:

  1. 쉽게 테스트. 앱을 실행하지 않고 저장 프로 시저를 테스트 할 수 있습니다.
  2. 쉬운 개발. DB 개발자가 저장 프로 시저를 작성하고 GUI 개발자가 UI 등을 작성하도록 할 수 있습니다.
  3. 다른 데이터베이스로의 포팅이 쉬워졌습니다. 변경 내용은 모두 데이터베이스에 포함되어 있으며 앱과의 계약 (저장 프로 시저에 전달 된 매개 변수)은 변경되어서는 안됩니다.
  4. 여러 프런트 엔드에서 저장 프로 시저의 논리를 사용할 수있는 기능. 새로운 고객을 창출해야하는 모든 앱에 동일한 고객 생성 논리를 코딩 할 필요가 없습니다.

큰 단점은 여러 가지 도구를 익히고 여러 도구를 사용해야한다는 것입니다. 이것은 .Net에서 Linq를 사용하는 큰 이유 중 하나입니다. SQL을 배우지 않아도되고 모든 것이 .Net 코드에 포함되어 있습니다.

우리는 모든 것을 위해 저장 프로 시저를 사용합니다. 그것은 아주 잘 작동합니다. 추상화는 당신의 친구입니다.

+0

다른 단점이 있다고 생각합니다. 확장 성. 데이터베이스는 아키텍처의 가장 어려운 부분 일 수 있습니다. 이 작업을 수행 할 수는 있지만, PHP 또는 Java 서버를 추가하는 것보다 더 어려운 일입니다. 따라서 확장성에 관심이 있다면 비즈니스 로직을 데이터베이스 서버에 얼마나 배치하고 웹/앱 서버간에 확장 할 경우 확장 할 수 있는지를 조정할 수 있습니다. – Marvo

+0

버전 관리는 어떻게됩니까? SQL이 소스 코드 안에 있으면 SQL에 대한 변경 사항이 소스 코드 저장소 (SVN, CVS 등)에 저장됩니다. – Michael

+0

Michael, 우리의 모든 저장 프로 시저 소스 코드는 TFS에 있습니다. SQL이 앱용 소스에 저장되어 있다면 관리가 더 쉽다는 것이 맞습니다. –