2009-05-28 3 views
1

나는이 예제를 가능한 한 간단하게 유지하려고 노력할 것입니다. OOP 패턴을 따르지 않는 이전 VB6 앱에서 도메인 기반 디자인 (각 테이블을 나타내는 비즈니스 개체)을 구현하려고합니다. 기존 코드는 10 년 된 VB 앱에서 예상 한 것처럼 작성됩니다 (예 : 필드에 인텔리 센스가없는 ADODB.Recordset 사용). 기존 코드는 OOP가 아니므로 기존 패턴을 따르는 것이 좋을 것입니다. DB 설계를 나중에 볼 수있는 개발자들에게 너무 많은 혼란을주지 않으면 서 새로운 요구 사항이 발생할 때 데이터베이스 변경 사항을 처리하는 방법이 내 도전 과제 중 하나입니다. 이 응용 프로그램에서 가정하자정규화되지 않은 넓은 테이블에서 깨끗한 휴식을 취하십시오.

우리는 다음과 같은 부담을 과도하게 명확하게 가상의 '클라이언트'테이블이 있습니다 된 ClientID CLIENTNAME 연락처 이름시 주 우편 번호 전화 CreditLimit CurBalance을 (그리고 계속적으로 그리고에 ...)

주소 InterestRate 약관

이 존재합니다 기존의 2 개 금융 분야부터 이상한 분할로 나타날 수 있습니다 별도의 'Fiancials'테이블에 InterestRate과 이용 약관을 깰 허용 될 수 :

새로운 요구 사항은 새로운 금융 분야에 대한 호출 원래 테이블?

이상적으로 오래된 금융 필드 (CreditLimit, CurBalance)는이 새 테이블로 재배치되지만 앱의 많은 부분이 손상 될 수 있으므로 필드를 이동하는 것은 바람직하지 않습니다. 나는 테이블을 더 넓고 넓게 만드는 현재의 관례를 멈추고 싶다.

기본적으로 이전 코드/테이블 디자인 만 남기고 새로운 필드를 사용하여 깨끗한 휴식을 취하고 모든 기존 테이블과 새 테이블을 처리하기위한 도메인 개체를 만듭니다. 클라이언트 개체는 새 테이블을 나타내는 Financials 속성을 노출 할 수 있습니다. 재무 표입니다.

깨끗한 휴식을 취하거나 기존 muck에 새 필드를 추가하기 위해 TRY를하는 것이 좋은 생각입니까? 이전 테이블과 새로운 테이블을 나타내는 영리한 명명 체계가 있습니까? DBA는 기존 설계를 분해하지 않고 어떻게 깔끔하게 정리합니까?

감사합니다.

답변

1

보기를 사용할 수 있습니다. 클라이언트보기가 더 이상 재무 정보를 노출하지 않도록하고 Financials보기가 정보를 노출하도록 작성 될 수 있습니다. 그 이유는 그들이 동일한 기본 테이블을 공유하기 때문에 최종 사용자가 중요하지 않기 때문입니다 ...

그런 다음 테이블에 대한 모든 액세스를 거부하고 저장된 procs 및 뷰를 통해서만 액세스 한 다음 언제든지 테이블을 리팩터링 할 수 있습니다.

또는 테이블의 이름을 바꾸고 분할하여 이전 테이블 이름으로 볼 수 있습니다.

기억해야 할 중요한 점은 비즈니스 개체는 1-1을 테이블에 매핑하지 않는다는 것입니다. 관계에 대한 링크 테이블이 있습니다 (예 : client_account가 클라이언트를 계정에 연결합니다).하지만 관계에 대한 비즈니스 개체는 없으며 대신 클라이언트 제약 조건은 디자인 제약 조건에 따라 계정 컬렉션 및/또는 그 반대가됩니다. .

0

액세스하는 데이터베이스에 따라보기와 관련된 또 다른 옵션은 기존 데이터 모델을 올바르게 표준화 된 설정으로 바꾸고 이전 테이블의 이름으로보기를 만드는 것입니다. 따라서 현재 CLIENT 테이블이있는 경우이를 테이블의 모든 집합에 맞게 분할하고 기존 테이블 구조를 복제하는 CLIENT 뷰를 만듭니다.뷰가 업데이트 가능하다고 가정하면 (오라클의 INSTEAD OF 트리거와 같은 것이 필요할 것입니다), 기존 코드는 뷰에 액세스하고 변경을 요구하지 않습니다. 새 코드는 적절한 데이터 모델에 직접 액세스 할 수 있습니다 (직접 또는 나중에 응용 프로그램 코드에 영향을주지 않고 데이터 모델을 자유롭게 전개 할 수있는 다른 뷰 세트를 통해). 기존 코드를 리팩토링 할 시간이 있으면 새로운 데이터 모델을 가리킬 수 있습니다.

관련 문제