2012-09-10 2 views
-1

사용자가 블록을 사용하여 테스트를 작성할 수있는 응용 프로그램을 작성 중입니다. 블록은 명령 (예 : assign, for, if 등)이므로 일부 블록은 다른 블록을 포함 할 수도 있습니다. 우리는 복합 패턴을 사용하고
는 - (추상)는 abstract blockleaf & composite 블록 클래스가, 그리고 콘크리트 블록 관련 클래스에서 상속 (if 블록은 합성이다, assign 블록은 잎이다).
전체 테스트를 직렬화하여 blob로 저장하는 데 사용했지만 테스트를 검색 할 수 있도록 변경하려고합니다.
그러면 DB 디자인은 어떻게 생겼을까요? 각 개체에 대한 테이블을 가져야합니까? 우리의 경우 약 30 개의 테이블을 의미합니다. 블록의 유형을 열로 포함해야합니까? 즉, 어딘가에 if-else 스위치가 있습니다.
귀하의 통찰력과 제안에 감사드립니다.
감사합니다.여러 다른 객체에 대한 DB 설계

답변

2

각각 종류의 표가 있어야합니다. 개체입니다. 같은 종류의 여러 인스턴스는 동일한 테이블의 여러 행에 저장되어야하며 서로 다른 데이터를 사용하여 서로 구별해야합니다.

두 개체가 같은 종류인지 아닌지에 대한 질문은 미묘한 문제 일 수 있습니다. 특히 윤곽을 잡을 경우 더욱 그렇습니다. 여기 제 제안이 있습니다. 처리하려고하는 모든 객체에 대한 객체 지향 분석을 수행합니다. 객체 지향 분석과 객체 지향 설계를 구별해야합니다. 필요한 경우 교과서를 참조하십시오. Peter Coad는 20 년 전에 OOA에 좋은 책을 저술했습니다.

OOA 모델을 ER 모델로 변환하고, 동작을 혼합에서 제외하고, 데이터 만 유지합니다. OOA 모델을 계속 유지하십시오. 소프트웨어를 설계 할 때 유용 할 것이기 때문입니다. ER 모델은 gen-spec 패턴을 수용 할 수 있으므로 모델에 객체의 클래스와 하위 클래스가있는 경우이 기능을 사용하십시오. 당신의 경우에, 당신은 할 것입니다.

그런 다음 관계형 모델을 일련의 SQL 데이터 정의 스크립트로 변환하기위한 준비로 ER 모델을 관계형 모델로 변환하십시오. 관계형 모델에 상속 기능이 내장되어 있지 않기 때문에 클래스와 하위 클래스는 지저분 해집니다. "클래스 테이블 상속"이라는 튜토리얼을 참조하십시오. 여기에 CTI 질문에 대한 답변이 많이 있습니다.

CTI를 올바르게 수행하면 개체 유형 (클래스)이 별도의 필드로 필요하지 않지만 속도를 높이려면 해당 필드를 포함 할 수 있습니다 (비정규 화). 필요하지 않으면 일반적으로 그렇게하지 않습니다.

관련 문제