문제

지 궁금하기도 해요 사람의 접근 방식을 사용하여 저장 프로시저는 데이터베이스에 액세스하여 여러 애플리케이션에 적합합니다.특히,당신은 당신을 유지하는 경향이의 다른 세트를 저장 프로시저를 위한 각각의 응용 프로그램,당신은 당신을 사용하려고 공유 설정,또는 당신은 혼합?

한편,재사용의 SPs 할 수 있습에 대한 적은 변화가 있을 때 모델을 변경 또는 유사한 무언가를 이상적으로 유지보수가 감소했습니다.다른 한편으로,의 요구가 있는 경우 응용 프로그램 갈리,변경 사항을 저장 프로시저 하나의 애플리케이션에 대한 끊을 수 있는 다른 응용 프로그램.내가 참고해야하는 우리의 환경에서,각각의 응용 프로그램은 그것의 자신의 개발 팀과 함께 가난한 커뮤니케이션이다.데이터 팀은 더 나은 커뮤니케이션이지만,대부분 임무를 저장 프로시저를 쓰고 있다.

감사합니다!

도움이 되었습니까?

해결책

그것은 모두에 따라 추상화 전략이다.는 저장 처리 절차적으로 분리된 시점의 추상화,또는 그들은 그들로 처리되는 또 다른 응용 프로그램의 일부를 호출하는 그들.

대답하는 방법을 알려줄을 관리할 수 있습니다.그들은 경우 개별한 추상화,그들이 공유할 수 있으로,필요할 경우 새로운 기능을 추가하는 새로운 절차가 있습니다.그들은 경우 응용 프로그램의 일부를 호출하는,그들은 공유하지 않.

다른 팁

저장 프로시저를 만들어야 하는 데이터에 기초하여하려는 반환하지 않 응용 프로그램을 만드는 요청을 합니다.이 있는 경우는 저장하는 절차를 GetAllItems,반환해야 합니다 모든 항목에서 데이터베이스입니다.는 경우 응용 프로그램 중 하나를 얻을하려는 모든 품목의 카테고리를 만들 GetAllItemsByCategory.아무 이유도 없을 위한 비즈니스의 규칙을 저장하는 절차에 따라 변경을 요청하는 응용 프로그램은 사용 데이터입니다.

내 경험있는 데 SPs 여러 응용 프로그램에서 공유의 원인이 고통입니다.사실,저는 주장도 있는 데이터베이스에 직접 액세스 하나 이상의 응용프로그램에 의해 최고의 장기적인 건물입니다.

패턴을 추천하고 구현하는 것만 중 하나는 응용 프로그램이"자신의",각 데이터베이스를 제공하는 Api(서비스 등을 이용하실 수 있습니다.) 다른 응용 프로그램에 대한 액세스 및 수정하는 데이터입니다.

이는 여러 가지 이점:

  1. 소유하는 응용 프로그램에 적용할 수 있는 모든 비즈니스 논리,로깅,etc.을 확인하는 안정된 유지
  2. 스키마가 변경될 경우,모든 인터페이스 알려져 있고 테스트 할 수 있습을 확인한 외부 응용 프로그램은 여전히 작동할 것입니다

저장 프로시저를 노출해야 사업 규칙이 없는 변경에 따라서 응용 프로그램이 그들을 사용하고 있습니다.이렇게 규칙을 저장하고 한 번 업데이트 대신 모든 장소에 사용되는 악몽이다.

이런 식으로 생각:저장된 절차에 대해서는 데이터의 밑에,그리고 말이 정말로 모르는 응용 프로그램이다.가능성 중 하나는 응용 프로그램을 읽을 필요가 또는 업데이트하는 방법으로 데이터를 다른지,그리고 한 사용하는 것 SPs 는 다른 것이 없습니다.

었다면 내 응용 프로그램/데이터베이스/등의 변화를 흥미로운 멀티미디어 서비스 중 하나를 개선하기 위해 응용 프로그램 끊고 다른데,고려의 증거는 더 깊은 디자인 문제입니다.

마지막 부분의 질문을 내가 믿고 대답했다.

으로 이미 가난한 커뮤니케이션을 공유,절차 개발 팀은 단지 추가 가능성이 있는 지점의 실패를 일으킬 수 있습 팀 막 시작했다고 생각합니다.

면 내가 같은 팀에서 여러 프로젝트에서 작업하는 시간을 절약하고 공유하는 절차,그러나 일반적으로 내가 찾는 조금 복제(몇 가지 절차가 여기 저기)을 방지하는 데 도움이 치명적인 변경/중복을 나중에 필요할 때 응용 프로그램을 시작한다.

LordScarlet 또한 핵심 요소라면뿐만 아니라,그것은 일반적인 없이 비즈니스 논리는 그것을 공유할 수 없는 문제입니다.

때마다 우리가 저장된 절차는 일반적인 여러 응용 프로그램,우리는 데이터베이스를 만들고 그냥 그들을 위한 절차(그리고 보기 및 테이블,etc.).는 데이터베이스(우리는"기본")은 다음 개발자(또는 팀장)책임에 대한 그것은(유지 관리 및 테스트).

는 경우 다른 팀에 필요한 새로운 기능,그들이 쓸 수 있다고 베이스 개발자는 하나 그것을 구현하는 기본 DB 또는 제안 간단한 방법입니다.

우리가 사용하려고 한,공동 저장 proc 가능하지만,우리에 실행 상황을 설명합니다.우리는 그것을 처리를 추가하여 응용 프로그램을 접하려면 저장되었(ApplicationName_StoredProcName).

종종 이러한 저장 프로시저를 호출 중앙 또는"master"저장된 proc 지만,이 방법을위한 공간을 떠나 특정 응용 프로그램을 변경합니다.

나는 생각하지 않 공유 Sprocs 중에서 여러 응용 프로그램 의미가 있습니다.

나는 볼 수 있습니다례 공유를 위한 데이터베이스에서 관련 응용 프로그램이지만,아마도 그 응용 프로그램은 별도의 많은 부분에서 취급하기 때문에 데이터에서 매우 다르게 하나니다.

를 사용하여 동일한 건물 일할 수 있는 응용 프로그램에 걸쳐,하지만 상상 사용하려고 하는 같은 비즈니스 로직 레이어서 여러 응용 프로그램."하지만 기다려!"당신은 말한다,"그는 어리석은...를 사용하면 같은 BLL,왜 나는 별도의 응용 프로그램?그들이 동일한 것이 아니다!"

QED.

이상적으로 중 하나를 사용 proc 지 여러 버전입니다.해야 하는 경우 버전,고객 당사의 아이디어는 1db 고객별로 1db 든 고객에게 제공됩니다.이것은 또한 몇 가지 흥미로운 준비의 db 에 다른 서버(할당 큰/무거운 사람을 커버하는 동안 작은 것들을 공유할 수 있는 하드웨어)

당신이 볼 수있는 능력에 대한 공유 SQL 코드를 시도를 구축 라이브러리의 추상적인 기능입니다.이 방법은 다시 사용할 수 있습는 코드는 일반적인 것들과 비즈니스를 진행할 수 있습니다 논리는 별도의 수 있습니다.동를 수행할 수 있습견-그들은 유지 될 수 있습니다 아주 일반적이고 유용한 여러 애플리케이션에 적합합니다.

당신은 아마도 찾을 수 없는 많은 사용에 대한 일반적인 저장된 절차로 당신을 따라 이동합니다.

즉 우리가 구현되면 프로젝트와 함께 일하는 매우 나쁘게 설계된 레거시 데이터베이스입니다.우리가 구현된 집합 저장 프로시저는 정보를 검색 쉽습니다.할 때 다른 사람들이 다른 팀에서 사용하고 싶었 같은 정보를 우리는 refactor 우리의 저장 프로시저를 그들에게 보다 일반적인 추가,추가 계층의 의견 및 문서 허용되는 다른 사람들을 우리의 사용 절차가 있습니다.는 솔루션의 일 오히려습니다.

많은 저장 프로시저는 응용 프로그램 독립적지만 몇 가지 있을 수 있습 있는 응용 프로그램에 의존합니다.예를 들어,CRUD(Create,Select,Update,Delete)저장된 절차에 갈 수 있는 응용 프로그램에서.특히 당신이에 던질 수 있습 감사 logic(행되는 경우에는 트리거 하지만 거기에 제한이 얼마나 복잡한에서 얻을 수 있습니다 트리거).이 있는 경우의 일부 유형 표준링 소프트웨어에서 쇼핑하는 중간 계층이 필요할 수 있습 저장 프로시저를 만드//선택하는 업데이트/삭제 데이터베이스에서 사용하면 응용 프로그램에 관계없이 어떤 경우에는 절차를 공유합니다.

동일한 시간에있을 수있는 몇 가지 유용한 방법으로 데이터,ie GetProductsSoldBySalesPerson,등등....는 것입니다 또한 응용 프로그램 독립적입니다.할 수 있습의 무리가 있 조회 테이블이 어떤 분야에 대처럼 부서,주소 등입니다.이 있을 수 있습니다 그래서 절차를 반환하의 테이블과 함께 모든 텍스트 필드가 있습니다.Ie 대신 SalesPersonID,SaleDate,CustomerID,DepartmentID,CustomerAddressID 절차에 반환하기 SalesPersonName,SaleDate,크에서 일어나십시오,DepartmentName,CustomerAddress.이 사용될 수도 있습 응용 프로그램에서.고객 관계를 시스템이 원하는 고객의 이름/주소/른 속성으로 결제 시스템입니다.그래서 뭔가 하는 모든 조인과에서 모든 고객 정보를 쿼리할 수 있을 것에 걸쳐 사용되는 응용 프로그램.틀림없이 만드는 방법으로 데이터를 볼 수은 도메인의 보기,하지만 사람들이 종종 사용된 절차를 저장하십니다.

그래서 기본적으로,삭제할 때 당신이 당신은 당신을 삭제해야에서 3 개 또는 4 개의 기타 테이블 데이터 무결성을 보장합니다.로직 너무 복잡해 트리거가?다음 저장 프로시저는 모두 응용 프로그램 사용을 삭제할 수 있 중요합니다.같은 일을 수행해야에서 생성.있다면 일반적인은 항상 수행할 수도 있습니다 하나를 가지 저장 프로시저는 모든 일을 결합합니다.는 경우 다음 나중에 변경 테이블 주위에 당신을 유지할 수 있는 절차 동일하고 다만 변화한 논리가 있다.

의 개념을 공유하는 데이터는 스키마에 걸쳐 여러 응용 프로그램은 힘든 일입니다.결국,당신의 스키마가 손상된 성능:비정규화하는 인덱스를 만들 수 있습니다.는 경우에 당신은 당신이 할 수있는 크기의 행에 반할 수 있는 더블 수 페이지당 행하고,가능성,반으로 줄이는 데 걸리는 시간을 검사하는 테이블.그러나,당신은 단지 포함'일반'기능에 주요 테이블 데이터에만 관심의 특정 응용 프로그램에 다른(그러나 관련)테이블,당신은 가입하는 사방을 다시 얻을'하나의 테이블 아이디어'.

더 많은 인덱스를 지원하는 다른 응용 프로그램을 일으킬 것이 늘어나는 시간을 삽입 업데이트 및 삭제 데이터에서 각각의 테이블에 있습니다.

데이터베이스 서버에서 종종 병목 현상이기 때문에,뿐만 아니라 데이터베이스할 수 없 부하 균형이다.할 수 있는 파티션에서 데이터는 여러 서버지는 매우 복잡해 너무입니다.

마지막으로,이 정도의 필요한 조정은 일반적으로 거대하고,의심의 여지와 함께 싸우는 다른 부서에서 이상의 요구 사항을 얻을 우선순위,그리고 새로운 개발을 얻을 것이 수렁에 빠져들.

일반적으로'고립 된 데이터를 사일로 응용 프로그램당 모델 더 나은 작품이다.거의 모든 것을 우리가 하는-나는 작업에 대한 계약이 소프트웨어 하우스-에 기초에서 데이터 가져오기 및 내보내기 데이터를 다른 시스템으로의 응용 프로그램의 데이터베이스가 있습니다.

그것은 잘 있을 수 있습니다 더 쉽게 데이터 웨어하우스에서/의사 결정 지원 시스템나는 일반적으로 작업에 OLTP 시스템에 트랜잭션 성능이 매우 중요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top