문제

프리미엄 서비스 레거시 데이터베이스에 스키마는 더 이상 반영하는 데이터 모델은 모든 개발자 악몽이다.아직과 함께 모든 이야기의 refactoring 코드를 위해 유지 관리하지 않는 많은 refactoring 오래된 데이터베이스입니다.

무슨 방법에 대한 몇 가지 팁을 전환하면 더 좋은 스키마 파괴하지 않고 모든 코드를 사용하는 오래된 중 하나는?내가 제시 할 것이다 특정 문제에 내가 나의 점을 설명하지만 바랍에 대한 조언을 제공하는 다른 기술을 입증했용 가능성이 편리뿐만 아니라.


내 예를 들어:

나의 회사를 받고선 제품입니다.지금 제품을 수령하고 제품이 선적 매우 다양한 데이터 그와 관련된 그래서 원본 데이터베이스 설계자들은 별도의 테이블에 대한 영수증을 위해 출하.

내 일년동이 시스템과 함께 나왔다는 사실을 깨달은 현재 스키마를 만들지 않을 핥고 의미가 있습니다.후에는 모든 모두와 영수증을 받는 선적은 기본적으로 트랜잭션,그들 각각의 관련의 양을 변경하는 제품에서,마음만+/-인은 다릅니다.실제로,우리는이 자주 찾을 필요가 총 금액에는 제품을 변경되었을 통해 시간의 기간에 대한 문제는 이 디자인은 명백히 다루기 어렵다.

분명히 적절한 디자인의 하는 것이 하나의 트랜잭션 테이블과 함께 Id 는 외국의 열쇠 중 하나 ReceiptInfo 또는 ShipmentInfo 테이블.불행하게도,잘못된 스키마에서 이미 생산한 몇 년 동안 수백 개의 저장되는 절차,그리고 수천의 라인의 코드 작성된다.어떻게 그때 나는 전환한 스키마가 제대로 작동합니까?

도움이 되었습니까?

해결책

여기에의 전체 카탈로그의 데이터베이스 리팩토링:

http://databaserefactoring.com/

다른 팁

는 매우 어려운 일이 일;주변몇 빠른 옵션을 후에는 리팩터링 데이터베이스는:

  • 을 만들 전망과 일치하는 원래의 스키마에만 있을 당겨서 새로운 schema;필요할 수 있는 트리거는 여기에 그래서 어떤 업데이트를 전망할 수 있는 처리할 수 있습니다.
  • 을 만들 새로운 스키마에 넣어 트리거하기 위하여 각 측에 유지 다른 측면이다.
  • 이 책은(Refactoring 데이터베이스) 는 하나님이 나에게 보내기를 다룰 때에는 레거시 데이터베이스에 스키마를 포함하여 거의 동일한 문제에 대한 우리의 인벤토리 데이터베이스입니다.

    또한,시스템 장소에서 변화를 추적하는 데이터베이스에 스키마에(같은 시리즈의 변경하는 스크립트를 저장하고 제어 소스 저장소)는 데 도움이 대단히 파악에 코드를 데이터베이스의 종속성입니다.

    저장된 절차 및 전망은 당신의 친구가 여기에있다.는 경우에도 이 시스템을 사용하지 않는,그들은 그것을 변경하여 사용,그 리팩터링 데이터베이스가 아래에 있습니다.

    귀하의 영수증과화물 다음이 될 전망이다.

    주,영수증 발송물은 실제로 매우 다른 두 짐승이 대부분의 시스템에서 일했다.영수증은 연결되어 공급 업체,배송하는 동안 연결하는 고객(또는 고객의/선박 위치).에서 재고 수준,그들은 종 동일합니다.

    은 모든 데이터 액세스를 제한하여 저장된 절차를 거쳐야 합니까?하지 않을 경우 작업이 될 수 있는 거의 불가능합니다.그렇다면,당신은 단지가 있는지 확인하는 데이터 마이그레이션 작업 스크립트만으로 전환하기 위해 새로운 스키마 다음 확인 절차를 저장 명예 theur 입력 및 출력이 있습니다.

    희망이 없음을 그들의 선택"*"검색어입니다.그들이 할 경우,사용'sp_help 테이블'전체 목록을 확인하려면의 열을 복사하고 서로를 대체*으로 완료 열 목록는지 확인하기 위해,당신은 파괴하지 않는 클라이언트 코드입니다.

    나의 변화를 만드는 점차적으로,많이 하의 통합을 테스트합니다.그것은 어렵지 않아요한 개입 없이습니다.

    첫번째 것을 만드는 것입니다 테이블 스키마.내가 이미 그를 위해 기존 데이터베이스를 사용하여 기업 건축가.당신이 선택할 수 있는 DB 를 만들 것입 당신은 모든이블/니다.그런 다음,해야 합니다 모든 것을 분할에서 카테고리입니다.Exemple 귀하의 모든 받 및 선박 제품을 함께,클라이언트에서 다른 카테고리입니다.면 모든 것이 명확하지,당신이 할 수있을 것입 리팩터링 필드를 작성하여 새로운 테이블,새로운 releashionship 고 새로운 필드가 있습니다.물론,이 필요로 할 것이 많이 변화하는 모든 경우에 액세스하지 않고 저장 프로시저입니다.

    나는 생각하지 않은 분명 id 의 거래 테이블은 외국의 열쇠 중 하나 ReceiptInfo 또는 ShipmentInfo.고 생각합니다.에서 객체지향 모델 당신이 있어야 거래 테이블과 ReceiptInfo 또는 ShipmentInfo 있어야 한 외국인의 열쇠 트랜잭션이다.당신이 운이 좋은 경우에,있을 것입니다 1 또는 2 점 코드에서 어디에서 새로운 기록 ReceiptInfo 또는 ShipmentInfo 만들어집니다.거기에 추가해야 합 코드를 추가한 항목을 트랜잭션에서 테이블과 이후 창조하는 항목에서 ReceiptInfo 또는 ShipmentInfo 으로 외국의 열쇠 트랜잭션이 있습니다.

    때때로 당신은 당신할 수 있는 새로운 테이블을 만들 수 있는 더 나은 구조 그리고 보기를 만들의 이름으로 귀하의 이전 테이블에 기초 데이터에 새로운 테이블이 있습니다.그런 식으로,당신은 코드는 것이는 동안 당신이 이동하기 시작하는 더 나은 구조입니다.조심해야 이지만 때때로 이동할에서 비-관계형 테이블에 관계형 구조의 여러 개 있는 기록하는 동안 코드를 기대하는 단 하나입니다.이 particulalry 사실이 있는 경우 사용하는 개발자 하위.

    다음으로 각각한 것은,변경이 이동 거리에서 전망을 실제 테이블이다.결국 당신이 삭제할 수 있습실 수 있습니다.이 적어도 작업할 수 있습 점진적으로 유지하는 것으로 작동 하는 물건을 이동,하지만 해결하기 위해 시작을 사용하는 일을 더 나은 디자인합니다.

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